]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_cryptkit/lib/CryptKitAsn1.cpp
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_cryptkit / lib / CryptKitAsn1.cpp
diff --git a/Security/libsecurity_cryptkit/lib/CryptKitAsn1.cpp b/Security/libsecurity_cryptkit/lib/CryptKitAsn1.cpp
new file mode 100644 (file)
index 0000000..d67478b
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * CryptKitAsn1.cpp - ASN1 templates for FEE keys and signatures
+ */
+
+#include "CryptKitAsn1.h"
+#include <security_asn1/secasn1.h>
+
+/*
+ * 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, }
+};
+
+