--- /dev/null
+/*
+ * CryptKitAsn1.h - ASN1 templates for FEE objects
+ */
+
+#ifndef _CRYPT_KIT_ASN1_H_
+#define _CRYPT_KIT_ASN1_H_
+
+#include "ckconfig.h"
+
+#if CRYPTKIT_DER_ENABLE
+
+#include <Security/cssmtype.h>
+#include <Security/secasn1t.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ -- FEE Curve parameters (defined in <security_cryptkit/feeTypes.h>)
+ FEEPrimeType ::= INTEGER { FPT_Mersenne(0), FPT_FEE(1), FPT_General(2) }
+ FEECurveType ::= INTEGER { FCT_Montgomery(0), FCT_Weierstrass(1),
+ FCT_General(2) }
+ */
+
+/*
+ FEECurveParameters ::= SEQUENCE
+ {
+ primeType FEEPrimeType,
+ curveType FEECurveType,
+ q INTEGER, -- unsigned
+ k INTEGER, -- signed
+ m INTEGER,
+ a BigIntegerStr,
+ bb BigIntegerStr, -- can't use variable/field b
+ c BigIntegerStr,
+ x1Plus BigIntegerStr,
+ x1Minus BigIntegerStr,
+ cOrderPlus BigIntegerStr,
+ cOrderMinus BigIntegerStr,
+ x1OrderPlus BigIntegerStr,
+ x1OrderMinus BigIntegerStr,
+ basePrime BigIntegerStr OPTIONAL
+ -- iff FEEPrimeType == CT_GENERAL
+}
+*/
+typedef struct {
+ CSSM_DATA primeType;
+ CSSM_DATA curveType;
+ CSSM_DATA q;
+ CSSM_DATA k;
+ CSSM_DATA m;
+ CSSM_DATA a;
+ CSSM_DATA b_; // can't use variable/field b
+ CSSM_DATA c;
+ CSSM_DATA x1Plus;
+ CSSM_DATA x1Minus;
+ CSSM_DATA cOrderPlus;
+ CSSM_DATA cOrderMinus;
+ CSSM_DATA x1OrderPlus;
+ CSSM_DATA x1OrderMinus;
+ CSSM_DATA basePrime; // OPTIONAL
+} FEECurveParametersASN1;
+
+extern const SecAsn1Template FEECurveParametersASN1Template[];
+
+/*
+ -- FEE ElGamal-style signature
+ FEEElGamalSignature ::= SEQUENCE {
+ u BigIntegerStr,
+ pmX BigIntegerStr
+ }
+*/
+typedef struct {
+ CSSM_DATA u;
+ CSSM_DATA pmX;
+} FEEElGamalSignatureASN1;
+
+extern const SecAsn1Template FEEElGamalSignatureASN1Template[];
+
+/*
+ -- FEE ECDSA-style signature
+ FEEECDSASignature ::= SEQUENCE {
+ c BigIntegerStr,
+ d BigIntegerStr
+ }
+*/
+typedef struct {
+ CSSM_DATA c;
+ CSSM_DATA d;
+} FEEECDSASignatureASN1;
+
+extern const SecAsn1Template FEEECDSASignatureASN1Template[];
+
+/*
+ FEEPublicKey ::= SEQUENCE
+ {
+ version INTEGER,
+ curveParams FEECurveParameters,
+ plusX BigIntegerStr,
+ minusX BigIntegerStr,
+ plusY BigIntegerStr OPTIONAL
+ -- iff FEECurveType == ct-weierstrass
+}
+*/
+typedef struct {
+ CSSM_DATA version;
+ FEECurveParametersASN1 curveParams;
+ CSSM_DATA plusX;
+ CSSM_DATA minusX;
+ CSSM_DATA plusY; // OPTIONAL
+} FEEPublicKeyASN1;
+
+extern const SecAsn1Template FEEPublicKeyASN1Template[];
+
+/*
+ FEEPrivateKey ::= SEQUENCE
+ {
+ version INTEGER,
+ curveParams FEECurveParameters,
+ privData BigIntegerStr
+ }
+*/
+typedef struct {
+ CSSM_DATA version;
+ FEECurveParametersASN1 curveParams;
+ CSSM_DATA privData;
+} FEEPrivateKeyASN1;
+
+extern const SecAsn1Template FEEPrivateKeyASN1Template[];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CRYPTKIT_DER_ENABLE */
+
+#endif /* _CRYPT_KIT_ASN1_H_ */