1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil -*- */ 2 3 /* 4 * Fortezza support is removed. 5 * 6 * This Source Code Form is subject to the terms of the Mozilla Public 7 * License, v. 2.0. If a copy of the MPL was not distributed with this 8 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 9 10 /* Fortezza support is removed. 11 * This file remains so that old programs will continue to compile, 12 * But this functionality is no longer supported or implemented. 13 */ 14 15 #include "seccomon.h" 16 #include "prio.h" 17 18 typedef struct PEHeaderStr PEHeader; 19 20 #define PE_MIME_TYPE "application/pre-encrypted" 21 22 typedef struct PEFortezzaHeaderStr PEFortezzaHeader; 23 typedef struct PEFortezzaGeneratedHeaderStr PEFortezzaGeneratedHeader; 24 typedef struct PEFixedKeyHeaderStr PEFixedKeyHeader; 25 typedef struct PERSAKeyHeaderStr PERSAKeyHeader; 26 27 struct PEFortezzaHeaderStr { 28 unsigned char key[12]; 29 unsigned char iv[24]; 30 unsigned char hash[20]; 31 unsigned char serial[8]; 32 }; 33 34 struct PEFortezzaGeneratedHeaderStr { 35 unsigned char key[12]; 36 unsigned char iv[24]; 37 unsigned char hash[20]; 38 unsigned char Ra[128]; 39 unsigned char Y[128]; 40 }; 41 42 struct PEFixedKeyHeaderStr { 43 unsigned char pkcs11Mech[4]; 44 unsigned char labelLen[2]; 45 unsigned char keyIDLen[2]; 46 unsigned char ivLen[2]; 47 unsigned char keyLen[2]; 48 unsigned char data[1]; 49 }; 50 51 struct PERSAKeyHeaderStr { 52 unsigned char pkcs11Mech[4]; 53 unsigned char issuerLen[2]; 54 unsigned char serialLen[2]; 55 unsigned char ivLen[2]; 56 unsigned char keyLen[2]; 57 unsigned char data[1]; 58 }; 59 60 #define PEFIXED_Label(header) (header->data) 61 #define PEFIXED_KeyID(header) (&header->data[GetInt2(header->labelLen)]) 62 #define PEFIXED_IV(header) (&header->data[GetInt2(header->labelLen)\ 63 +GetInt2(header->keyIDLen)]) 64 #define PEFIXED_Key(header) (&header->data[GetInt2(header->labelLen)\ 65 +GetInt2(header->keyIDLen)+GetInt2(header->keyLen)]) 66 #define PERSA_Issuer(header) (header->data) 67 #define PERSA_Serial(header) (&header->data[GetInt2(header->issuerLen)]) 68 #define PERSA_IV(header) (&header->data[GetInt2(header->issuerLen)\ 69 +GetInt2(header->serialLen)]) 70 #define PERSA_Key(header) (&header->data[GetInt2(header->issuerLen)\ 71 +GetInt2(header->serialLen)+GetInt2(header->keyLen)]) 72 struct PEHeaderStr { 73 unsigned char magic [2]; 74 unsigned char len [2]; 75 unsigned char type [2]; 76 unsigned char version[2]; 77 union { 78 PEFortezzaHeader fortezza; 79 PEFortezzaGeneratedHeader g_fortezza; 80 PEFixedKeyHeader fixed; 81 PERSAKeyHeader rsa; 82 } u; 83 }; 84 85 #define PE_CRYPT_INTRO_LEN 8 86 #define PE_INTRO_LEN 4 87 #define PE_BASE_HEADER_LEN 8 88 89 #define PRE_BLOCK_SIZE 8 90 91 92 #define GetInt2(c) ((c[0] << 8) | c[1]) 93 #define GetInt4(c) (((unsigned long)c[0] << 24)|((unsigned long)c[1] << 16)\ 94 |((unsigned long)c[2] << 8)| ((unsigned long)c[3])) 95 #define PutInt2(c,i) ((c[1] = (i) & 0xff), (c[0] = ((i) >> 8) & 0xff)) 96 #define PutInt4(c,i) ((c[0]=((i) >> 24) & 0xff),(c[1]=((i) >> 16) & 0xff),\ 97 (c[2] = ((i) >> 8) & 0xff), (c[3] = (i) & 0xff)) 98 99 #define PRE_MAGIC 0xc0de 100 #define PRE_VERSION 0x1010 101 #define PRE_FORTEZZA_FILE 0x00ff 102 #define PRE_FORTEZZA_STREAM 0x00f5 103 #define PRE_FORTEZZA_GEN_STREAM 0x00f6 104 #define PRE_FIXED_FILE 0x000f 105 #define PRE_RSA_FILE 0x001f 106 #define PRE_FIXED_STREAM 0x0005 107 108 PEHeader *SSL_PreencryptedStreamToFile(PRFileDesc *fd, PEHeader *, 109 int *headerSize); 110 111 PEHeader *SSL_PreencryptedFileToStream(PRFileDesc *fd, PEHeader *, 112 int *headerSize); 113 114