Add certificate verification
[platform/upstream/iotivity.git] / resource / csdk / connectivity / inc / pkix / cert.h
1 /******************************************************************
2  *
3  * Copyright 2015 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      LICENSE-2.0" target="_blank">http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19
20  ******************************************************************/
21
22 #ifndef _CERT_H_
23 #define _CERT_H_
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif //__cplusplus
28
29 #include "byte_array.h"
30 #include "pki_errors.h"
31
32 /**
33  * @struct CertificateX509
34  *
35  * Certificate structure.
36  *
37  * Structure fields contain byte arrays  pointed to relative DER certificate positions.
38  */
39 typedef struct
40 {
41     ByteArray    tbs;       /**< TBS certificate.*/
42     ByteArray    serNum;    /**< Serial number.*/
43     ByteArray    pubKey;    /**< Public key.*/
44
45     ByteArray    signR;     /**< Signature  r value.*/
46     ByteArray    signS;     /**< Signature  s value.*/
47
48     ByteArray    issuer;    /**< Issuer name.*/
49     ByteArray    subject;   /**< Subject name.*/
50
51     ByteArray   validFrom;   /**< Start time of certificate validity. */
52     ByteArray   validTo;     /**< End time of certificate validity. */
53
54 } CertificateX509;
55
56 /**
57  * Reads certificate from byte array and write it into certificate structure.
58  *
59  * @param[in] code  Byte array with DER encoded certificate
60  * @param[out] crt  Pointer to certificate structure
61  * @return  PKI_SUCCESS if successful
62  */
63 PKIError DecodeCertificate(ByteArray code, CertificateX509 *crt);
64
65 /**
66  * Parse ECDSA public key, remove ASN.1 extra bytes.
67  *
68  * @param ByteArray structure which contains public key
69  * @return PKI_SUCCESS if public key is correct, error code in case of invalid key
70  */
71 PKIError ParsePublicKey(ByteArray *caPublicKey);
72
73 #ifdef __cplusplus
74 }
75 #endif //__cplusplus
76
77
78 #endif //_CERT_H_