1/* 2 * CryptKitAsn1.h - ASN1 templates for FEE objects 3 */ 4 5#ifndef _CRYPT_KIT_ASN1_H_ 6#define _CRYPT_KIT_ASN1_H_ 7 8#include "ckconfig.h" 9 10#if CRYPTKIT_DER_ENABLE 11 12#include <Security/cssmtype.h> 13#include <Security/secasn1t.h> 14 15#ifdef __cplusplus 16extern "C" { 17#endif 18 19/* 20 -- FEE Curve parameters (defined in <security_cryptkit/feeTypes.h>) 21 FEEPrimeType ::= INTEGER { FPT_Mersenne(0), FPT_FEE(1), FPT_General(2) } 22 FEECurveType ::= INTEGER { FCT_Montgomery(0), FCT_Weierstrass(1), 23 FCT_General(2) } 24 */ 25 26/* 27 FEECurveParameters ::= SEQUENCE 28 { 29 primeType FEEPrimeType, 30 curveType FEECurveType, 31 q INTEGER, -- unsigned 32 k INTEGER, -- signed 33 m INTEGER, 34 a BigIntegerStr, 35 bb BigIntegerStr, -- can't use variable/field b 36 c BigIntegerStr, 37 x1Plus BigIntegerStr, 38 x1Minus BigIntegerStr, 39 cOrderPlus BigIntegerStr, 40 cOrderMinus BigIntegerStr, 41 x1OrderPlus BigIntegerStr, 42 x1OrderMinus BigIntegerStr, 43 basePrime BigIntegerStr OPTIONAL 44 -- iff FEEPrimeType == CT_GENERAL 45} 46*/ 47typedef struct { 48 CSSM_DATA primeType; 49 CSSM_DATA curveType; 50 CSSM_DATA q; 51 CSSM_DATA k; 52 CSSM_DATA m; 53 CSSM_DATA a; 54 CSSM_DATA b_; // can't use variable/field b 55 CSSM_DATA c; 56 CSSM_DATA x1Plus; 57 CSSM_DATA x1Minus; 58 CSSM_DATA cOrderPlus; 59 CSSM_DATA cOrderMinus; 60 CSSM_DATA x1OrderPlus; 61 CSSM_DATA x1OrderMinus; 62 CSSM_DATA basePrime; // OPTIONAL 63} FEECurveParametersASN1; 64 65extern const SecAsn1Template FEECurveParametersASN1Template[]; 66 67/* 68 -- FEE ElGamal-style signature 69 FEEElGamalSignature ::= SEQUENCE { 70 u BigIntegerStr, 71 pmX BigIntegerStr 72 } 73*/ 74typedef struct { 75 CSSM_DATA u; 76 CSSM_DATA pmX; 77} FEEElGamalSignatureASN1; 78 79extern const SecAsn1Template FEEElGamalSignatureASN1Template[]; 80 81/* 82 -- FEE ECDSA-style signature 83 FEEECDSASignature ::= SEQUENCE { 84 c BigIntegerStr, 85 d BigIntegerStr 86 } 87*/ 88typedef struct { 89 CSSM_DATA c; 90 CSSM_DATA d; 91} FEEECDSASignatureASN1; 92 93extern const SecAsn1Template FEEECDSASignatureASN1Template[]; 94 95/* 96 FEEPublicKey ::= SEQUENCE 97 { 98 version INTEGER, 99 curveParams FEECurveParameters, 100 plusX BigIntegerStr, 101 minusX BigIntegerStr, 102 plusY BigIntegerStr OPTIONAL 103 -- iff FEECurveType == ct-weierstrass 104} 105*/ 106typedef struct { 107 CSSM_DATA version; 108 FEECurveParametersASN1 curveParams; 109 CSSM_DATA plusX; 110 CSSM_DATA minusX; 111 CSSM_DATA plusY; // OPTIONAL 112} FEEPublicKeyASN1; 113 114extern const SecAsn1Template FEEPublicKeyASN1Template[]; 115 116/* 117 FEEPrivateKey ::= SEQUENCE 118 { 119 version INTEGER, 120 curveParams FEECurveParameters, 121 privData BigIntegerStr 122 } 123*/ 124typedef struct { 125 CSSM_DATA version; 126 FEECurveParametersASN1 curveParams; 127 CSSM_DATA privData; 128} FEEPrivateKeyASN1; 129 130extern const SecAsn1Template FEEPrivateKeyASN1Template[]; 131 132#ifdef __cplusplus 133} 134#endif 135 136#endif /* CRYPTKIT_DER_ENABLE */ 137 138#endif /* _CRYPT_KIT_ASN1_H_ */ 139