X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/5dd5f9ec28f304ca377c42fd7f711d6cf12b90e1..5c19dc3ae3bd8e40a9c028b0deddd50ff337692c:/OSX/libsecurity_cryptkit/lib/CryptKitAsn1.cpp diff --git a/OSX/libsecurity_cryptkit/lib/CryptKitAsn1.cpp b/OSX/libsecurity_cryptkit/lib/CryptKitAsn1.cpp new file mode 100644 index 00000000..d67478b2 --- /dev/null +++ b/OSX/libsecurity_cryptkit/lib/CryptKitAsn1.cpp @@ -0,0 +1,82 @@ +/* + * CryptKitAsn1.cpp - ASN1 templates for FEE keys and signatures + */ + +#include "CryptKitAsn1.h" +#include + +/* + * Unlike RSA, DSA, and Diffie-Hellman, the integers in these + * objects are indeed signed. + */ +#define SEC_ASN1_SIGNED (SEC_ASN1_SIGNED_INT | SEC_ASN1_INTEGER) + +/* FEECurveParametersASN1 */ +const SecAsn1Template FEECurveParametersASN1Template[] = { + { SEC_ASN1_SEQUENCE, + 0, NULL, sizeof(FEECurveParametersASN1) }, + { SEC_ASN1_INTEGER, offsetof(FEECurveParametersASN1,primeType) }, + { SEC_ASN1_INTEGER, offsetof(FEECurveParametersASN1,curveType) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,q) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,k) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,m) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,a) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,b_) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,c) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,x1Plus) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,x1Minus) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,cOrderPlus) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,cOrderMinus) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,x1OrderPlus) }, + { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,x1OrderMinus) }, + { SEC_ASN1_SIGNED | SEC_ASN1_OPTIONAL, + offsetof(FEECurveParametersASN1,basePrime) }, + { 0, } +}; + +/* FEEElGamalSignatureASN1 */ +const SecAsn1Template FEEElGamalSignatureASN1Template[] = { + { SEC_ASN1_SEQUENCE, + 0, NULL, sizeof(FEEElGamalSignatureASN1) }, + { SEC_ASN1_SIGNED, offsetof(FEEElGamalSignatureASN1,u) }, + { SEC_ASN1_SIGNED, offsetof(FEEElGamalSignatureASN1,pmX) }, + { 0, } +}; + +/* FEEECDSASignatureASN1 */ +const SecAsn1Template FEEECDSASignatureASN1Template[] = { + { SEC_ASN1_SEQUENCE, + 0, NULL, sizeof(FEEECDSASignatureASN1) }, + { SEC_ASN1_SIGNED, offsetof(FEEECDSASignatureASN1,c) }, + { SEC_ASN1_SIGNED, offsetof(FEEECDSASignatureASN1,d) }, + { 0, } +}; + +/* FEEPublicKeyASN1 */ +const SecAsn1Template FEEPublicKeyASN1Template[] = { + { SEC_ASN1_SEQUENCE, + 0, NULL, sizeof(FEEPublicKeyASN1) }, + { SEC_ASN1_SIGNED, offsetof(FEEPublicKeyASN1,version) }, + { SEC_ASN1_INLINE, + offsetof(FEEPublicKeyASN1,curveParams), + FEECurveParametersASN1Template }, + { SEC_ASN1_SIGNED, offsetof(FEEPublicKeyASN1,plusX) }, + { SEC_ASN1_SIGNED, offsetof(FEEPublicKeyASN1,minusX) }, + { SEC_ASN1_SIGNED | SEC_ASN1_OPTIONAL, + offsetof(FEEPublicKeyASN1,plusY) }, + { 0, } +}; + +/* FEEPrivateKeyASN1 */ +const SecAsn1Template FEEPrivateKeyASN1Template[] = { + { SEC_ASN1_SEQUENCE, + 0, NULL, sizeof(FEEPrivateKeyASN1) }, + { SEC_ASN1_SIGNED, offsetof(FEEPrivateKeyASN1,version) }, + { SEC_ASN1_INLINE, + offsetof(FEEPrivateKeyASN1,curveParams), + FEECurveParametersASN1Template }, + { SEC_ASN1_SIGNED, offsetof(FEEPrivateKeyASN1,privData) }, + { 0, } +}; + +