VirtualBox

source: vbox/trunk/include/iprt/crypto/rsa.h@ 77807

Last change on this file since 77807 was 76585, checked in by vboxsync, 6 years ago

*: scm --fix-header-guard-endif

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1/** @file
2 * IPRT - Crypto - RSA Public Key Cryptosystem .
3 */
4
5/*
6 * Copyright (C) 2006-2019 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef IPRT_INCLUDED_crypto_rsa_h
27#define IPRT_INCLUDED_crypto_rsa_h
28#ifndef RT_WITHOUT_PRAGMA_ONCE
29# pragma once
30#endif
31
32#include <iprt/asn1.h>
33#include <iprt/crypto/x509.h>
34#include <iprt/crypto/pkcs7.h>
35#include <iprt/md5.h>
36#include <iprt/sha.h>
37
38
39RT_C_DECLS_BEGIN
40
41/** @defgroup grp_rt_cr_rsa RTCrRsa - RSA Public Key Cryptosystem
42 * @ingroup grp_rt_crypto
43 * @{
44 */
45
46/**
47 * RSA public key - ASN.1 IPRT representation.
48 */
49typedef struct RTCRRSAPUBLICKEY
50{
51 /** Sequence core for the structure. */
52 RTASN1SEQUENCECORE SeqCore;
53 /** The modulus (n). */
54 RTASN1INTEGER Modulus;
55 /** The public exponent (e). */
56 RTASN1INTEGER PublicExponent;
57} RTCRRSAPUBLICKEY;
58/** Pointer to the ASN.1 IPRT representation of an RSA public key. */
59typedef RTCRRSAPUBLICKEY *PRTCRRSAPUBLICKEY;
60/** Pointer to the const ASN.1 IPRT representation of an RSA public key. */
61typedef RTCRRSAPUBLICKEY const *PCRTCRRSAPUBLICKEY;
62RTASN1TYPE_STANDARD_PROTOTYPES(RTCRRSAPUBLICKEY, RTDECL, RTCrRsaPublicKey, SeqCore.Asn1Core);
63
64
65/**
66 * RSA other prime info (ASN.1 IPRT representation).
67 */
68typedef struct RTCRRSAOTHERPRIMEINFO
69{
70 /** Sequence core for the structure. */
71 RTASN1SEQUENCECORE SeqCore;
72 /** The prime (ri). */
73 RTASN1INTEGER Prime;
74 /** The exponent (di). */
75 RTASN1INTEGER Exponent;
76 /** The coefficient (ti). */
77 RTASN1INTEGER Coefficient;
78} RTCRRSAOTHERPRIMEINFO;
79/** Pointer to the ASN.1 IPRT representation of RSA other prime info. */
80typedef RTCRRSAOTHERPRIMEINFO *PRTCRRSAOTHERPRIMEINFO;
81/** Pointer to the const ASN.1 IPRT representation of RSA other prime info. */
82typedef RTCRRSAOTHERPRIMEINFO const *PCRTCRRSAOTHERPRIMEINFO;
83RTASN1TYPE_STANDARD_PROTOTYPES(RTCRRSAOTHERPRIMEINFO, RTDECL, RTCrRsaOtherPrimeInfo, SeqCore.Asn1Core);
84RTASN1_IMPL_GEN_SEQ_OF_TYPEDEFS_AND_PROTOS(RTCRRSAOTHERPRIMEINFOS, RTCRRSAOTHERPRIMEINFO, RTDECL, RTCrRsaOtherPrimeInfos);
85
86/**
87 * RSA private key - ASN.1 IPRT representation.
88 */
89typedef struct RTCRRSAPRIVATEKEY
90{
91 /** Sequence core for the structure. */
92 RTASN1SEQUENCECORE SeqCore;
93 /** Key version number. */
94 RTASN1INTEGER Version;
95 /** The modulus (n). */
96 RTASN1INTEGER Modulus;
97 /** The public exponent (e). */
98 RTASN1INTEGER PublicExponent;
99 /** The private exponent (d). */
100 RTASN1INTEGER PrivateExponent;
101 /** The first prime factor (p) of the modulus (n). */
102 RTASN1INTEGER Prime1;
103 /** The second prime factor (q) of the modulus (n). */
104 RTASN1INTEGER Prime2;
105 /** The first exponent (d mod (p-1)). */
106 RTASN1INTEGER Exponent1;
107 /** The second exponent (d mod (q-1)). */
108 RTASN1INTEGER Exponent2;
109 /** The coefficient ((inverse of q) mod p). */
110 RTASN1INTEGER Coefficient;
111 /** Optional other prime information (version must be 'multi' if present). */
112 RTCRRSAOTHERPRIMEINFOS OtherPrimeInfos;
113} RTCRRSAPRIVATEKEY;
114/** Pointer to the ASN.1 IPRT representation of an RSA private key. */
115typedef RTCRRSAPRIVATEKEY *PRTCRRSAPRIVATEKEY;
116/** Pointer to the const ASN.1 IPRT representation of an RSA private key. */
117typedef RTCRRSAPRIVATEKEY const *PCRTCRRSAPRIVATEKEY;
118RTASN1TYPE_STANDARD_PROTOTYPES(RTCRRSAPRIVATEKEY, RTDECL, RTCrRsaPrivateKey, SeqCore.Asn1Core);
119
120/** @name RSA Private Key Versions
121 * @{ */
122#define RTCRRSAPRIVATEKEY_VERSION_TWO_PRIME 0
123#define RTCRRSAPRIVATEKEY_VERSION_MULTI 1
124/** @} */
125
126
127/**
128 * RSA DigestInfo used by the EMSA-PKCS1-v1_5 encoding method.
129 */
130typedef struct RTCRRSADIGESTINFO
131{
132 /** Sequence core for the structure. */
133 RTASN1SEQUENCECORE SeqCore;
134 /** The digest algorithm. */
135 RTCRX509ALGORITHMIDENTIFIER DigestAlgorithm;
136 /** The digest. */
137 RTASN1OCTETSTRING Digest;
138} RTCRRSADIGESTINFO;
139/** Pointer to the ASN.1 IPRT representation of RSA digest info. */
140typedef RTCRRSADIGESTINFO *PRTCRRSADIGESTINFO;
141/** Pointer to the const ASN.1 IPRT representation of RSA digest info. */
142typedef RTCRRSADIGESTINFO const *PCRTCRRSADIGESTINFO;
143RTASN1TYPE_STANDARD_PROTOTYPES(RTCRRSADIGESTINFO, RTDECL, RTCrRsaDigestInfo, SeqCore.Asn1Core);
144
145/** @} */
146
147RT_C_DECLS_END
148
149#endif /* !IPRT_INCLUDED_crypto_rsa_h */
150
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette