michael@0: /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil -*- */ michael@0: michael@0: /* michael@0: * Fortezza support is removed. michael@0: * michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* Fortezza support is removed. michael@0: * This file remains so that old programs will continue to compile, michael@0: * But this functionality is no longer supported or implemented. michael@0: */ michael@0: michael@0: #include "seccomon.h" michael@0: #include "prio.h" michael@0: michael@0: typedef struct PEHeaderStr PEHeader; michael@0: michael@0: #define PE_MIME_TYPE "application/pre-encrypted" michael@0: michael@0: typedef struct PEFortezzaHeaderStr PEFortezzaHeader; michael@0: typedef struct PEFortezzaGeneratedHeaderStr PEFortezzaGeneratedHeader; michael@0: typedef struct PEFixedKeyHeaderStr PEFixedKeyHeader; michael@0: typedef struct PERSAKeyHeaderStr PERSAKeyHeader; michael@0: michael@0: struct PEFortezzaHeaderStr { michael@0: unsigned char key[12]; michael@0: unsigned char iv[24]; michael@0: unsigned char hash[20]; michael@0: unsigned char serial[8]; michael@0: }; michael@0: michael@0: struct PEFortezzaGeneratedHeaderStr { michael@0: unsigned char key[12]; michael@0: unsigned char iv[24]; michael@0: unsigned char hash[20]; michael@0: unsigned char Ra[128]; michael@0: unsigned char Y[128]; michael@0: }; michael@0: michael@0: struct PEFixedKeyHeaderStr { michael@0: unsigned char pkcs11Mech[4]; michael@0: unsigned char labelLen[2]; michael@0: unsigned char keyIDLen[2]; michael@0: unsigned char ivLen[2]; michael@0: unsigned char keyLen[2]; michael@0: unsigned char data[1]; michael@0: }; michael@0: michael@0: struct PERSAKeyHeaderStr { michael@0: unsigned char pkcs11Mech[4]; michael@0: unsigned char issuerLen[2]; michael@0: unsigned char serialLen[2]; michael@0: unsigned char ivLen[2]; michael@0: unsigned char keyLen[2]; michael@0: unsigned char data[1]; michael@0: }; michael@0: michael@0: #define PEFIXED_Label(header) (header->data) michael@0: #define PEFIXED_KeyID(header) (&header->data[GetInt2(header->labelLen)]) michael@0: #define PEFIXED_IV(header) (&header->data[GetInt2(header->labelLen)\ michael@0: +GetInt2(header->keyIDLen)]) michael@0: #define PEFIXED_Key(header) (&header->data[GetInt2(header->labelLen)\ michael@0: +GetInt2(header->keyIDLen)+GetInt2(header->keyLen)]) michael@0: #define PERSA_Issuer(header) (header->data) michael@0: #define PERSA_Serial(header) (&header->data[GetInt2(header->issuerLen)]) michael@0: #define PERSA_IV(header) (&header->data[GetInt2(header->issuerLen)\ michael@0: +GetInt2(header->serialLen)]) michael@0: #define PERSA_Key(header) (&header->data[GetInt2(header->issuerLen)\ michael@0: +GetInt2(header->serialLen)+GetInt2(header->keyLen)]) michael@0: struct PEHeaderStr { michael@0: unsigned char magic [2]; michael@0: unsigned char len [2]; michael@0: unsigned char type [2]; michael@0: unsigned char version[2]; michael@0: union { michael@0: PEFortezzaHeader fortezza; michael@0: PEFortezzaGeneratedHeader g_fortezza; michael@0: PEFixedKeyHeader fixed; michael@0: PERSAKeyHeader rsa; michael@0: } u; michael@0: }; michael@0: michael@0: #define PE_CRYPT_INTRO_LEN 8 michael@0: #define PE_INTRO_LEN 4 michael@0: #define PE_BASE_HEADER_LEN 8 michael@0: michael@0: #define PRE_BLOCK_SIZE 8 michael@0: michael@0: michael@0: #define GetInt2(c) ((c[0] << 8) | c[1]) michael@0: #define GetInt4(c) (((unsigned long)c[0] << 24)|((unsigned long)c[1] << 16)\ michael@0: |((unsigned long)c[2] << 8)| ((unsigned long)c[3])) michael@0: #define PutInt2(c,i) ((c[1] = (i) & 0xff), (c[0] = ((i) >> 8) & 0xff)) michael@0: #define PutInt4(c,i) ((c[0]=((i) >> 24) & 0xff),(c[1]=((i) >> 16) & 0xff),\ michael@0: (c[2] = ((i) >> 8) & 0xff), (c[3] = (i) & 0xff)) michael@0: michael@0: #define PRE_MAGIC 0xc0de michael@0: #define PRE_VERSION 0x1010 michael@0: #define PRE_FORTEZZA_FILE 0x00ff michael@0: #define PRE_FORTEZZA_STREAM 0x00f5 michael@0: #define PRE_FORTEZZA_GEN_STREAM 0x00f6 michael@0: #define PRE_FIXED_FILE 0x000f michael@0: #define PRE_RSA_FILE 0x001f michael@0: #define PRE_FIXED_STREAM 0x0005 michael@0: michael@0: PEHeader *SSL_PreencryptedStreamToFile(PRFileDesc *fd, PEHeader *, michael@0: int *headerSize); michael@0: michael@0: PEHeader *SSL_PreencryptedFileToStream(PRFileDesc *fd, PEHeader *, michael@0: int *headerSize); michael@0: