1/*
2 * CryptKitAsn1.cpp - ASN1 templates for FEE keys and signatures
3 */
4
5#include "CryptKitAsn1.h"
6#include <security_asn1/secasn1.h>
7
8/*
9 * Unlike RSA, DSA, and Diffie-Hellman, the integers in these
10 * objects are indeed signed.
11 */
12#define SEC_ASN1_SIGNED  (SEC_ASN1_SIGNED_INT | SEC_ASN1_INTEGER)
13
14/* FEECurveParametersASN1 */
15const SecAsn1Template FEECurveParametersASN1Template[] = {
16    { SEC_ASN1_SEQUENCE,
17	  0, NULL, sizeof(FEECurveParametersASN1) },
18    { SEC_ASN1_INTEGER, offsetof(FEECurveParametersASN1,primeType) },
19    { SEC_ASN1_INTEGER, offsetof(FEECurveParametersASN1,curveType) },
20    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,q) },
21    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,k) },
22    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,m) },
23    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,a) },
24    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,b_) },
25    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,c) },
26    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,x1Plus) },
27    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,x1Minus) },
28    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,cOrderPlus) },
29    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,cOrderMinus) },
30    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,x1OrderPlus) },
31    { SEC_ASN1_SIGNED, offsetof(FEECurveParametersASN1,x1OrderMinus) },
32    { SEC_ASN1_SIGNED | SEC_ASN1_OPTIONAL,
33		offsetof(FEECurveParametersASN1,basePrime) },
34    { 0, }
35};
36
37/* FEEElGamalSignatureASN1 */
38const SecAsn1Template FEEElGamalSignatureASN1Template[] = {
39    { SEC_ASN1_SEQUENCE,
40	  0, NULL, sizeof(FEEElGamalSignatureASN1) },
41    { SEC_ASN1_SIGNED, offsetof(FEEElGamalSignatureASN1,u) },
42    { SEC_ASN1_SIGNED, offsetof(FEEElGamalSignatureASN1,pmX) },
43    { 0, }
44};
45
46/* FEEECDSASignatureASN1 */
47const SecAsn1Template FEEECDSASignatureASN1Template[] = {
48    { SEC_ASN1_SEQUENCE,
49	  0, NULL, sizeof(FEEECDSASignatureASN1) },
50    { SEC_ASN1_SIGNED, offsetof(FEEECDSASignatureASN1,c) },
51    { SEC_ASN1_SIGNED, offsetof(FEEECDSASignatureASN1,d) },
52    { 0, }
53};
54
55/* FEEPublicKeyASN1 */
56const SecAsn1Template FEEPublicKeyASN1Template[] = {
57    { SEC_ASN1_SEQUENCE,
58	  0, NULL, sizeof(FEEPublicKeyASN1) },
59    { SEC_ASN1_SIGNED, offsetof(FEEPublicKeyASN1,version) },
60    { SEC_ASN1_INLINE,
61	  offsetof(FEEPublicKeyASN1,curveParams),
62	  FEECurveParametersASN1Template },
63    { SEC_ASN1_SIGNED, offsetof(FEEPublicKeyASN1,plusX) },
64    { SEC_ASN1_SIGNED, offsetof(FEEPublicKeyASN1,minusX) },
65    { SEC_ASN1_SIGNED | SEC_ASN1_OPTIONAL,
66	  offsetof(FEEPublicKeyASN1,plusY) },
67    { 0, }
68};
69
70/* FEEPrivateKeyASN1 */
71const SecAsn1Template FEEPrivateKeyASN1Template[] = {
72    { SEC_ASN1_SEQUENCE,
73	  0, NULL, sizeof(FEEPrivateKeyASN1) },
74    { SEC_ASN1_SIGNED, offsetof(FEEPrivateKeyASN1,version) },
75    { SEC_ASN1_INLINE,
76	  offsetof(FEEPrivateKeyASN1,curveParams),
77	  FEECurveParametersASN1Template },
78    { SEC_ASN1_SIGNED, offsetof(FEEPrivateKeyASN1,privData) },
79    { 0, }
80};
81
82
83