1*e71b7053SJung-uk Kim=pod
2*e71b7053SJung-uk Kim
3*e71b7053SJung-uk Kim=head1 NAME
4*e71b7053SJung-uk Kim
5*e71b7053SJung-uk KimASN1_INTEGER_get_uint64, ASN1_INTEGER_set_uint64,
6*e71b7053SJung-uk KimASN1_INTEGER_get_int64, ASN1_INTEGER_get, ASN1_INTEGER_set_int64, ASN1_INTEGER_set, BN_to_ASN1_INTEGER, ASN1_INTEGER_to_BN, ASN1_ENUMERATED_get_int64, ASN1_ENUMERATED_get, ASN1_ENUMERATED_set_int64, ASN1_ENUMERATED_set, BN_to_ASN1_ENUMERATED, ASN1_ENUMERATED_to_BN
7*e71b7053SJung-uk Kim- ASN.1 INTEGER and ENUMERATED utilities
8*e71b7053SJung-uk Kim
9*e71b7053SJung-uk Kim=head1 SYNOPSIS
10*e71b7053SJung-uk Kim
11*e71b7053SJung-uk Kim #include <openssl/asn1.h>
12*e71b7053SJung-uk Kim
13*e71b7053SJung-uk Kim int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a);
14*e71b7053SJung-uk Kim long ASN1_INTEGER_get(const ASN1_INTEGER *a);
15*e71b7053SJung-uk Kim
16*e71b7053SJung-uk Kim int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r);
17*e71b7053SJung-uk Kim int ASN1_INTEGER_set(const ASN1_INTEGER *a, long v);
18*e71b7053SJung-uk Kim
19*e71b7053SJung-uk Kim int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a);
20*e71b7053SJung-uk Kim int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r);
21*e71b7053SJung-uk Kim
22*e71b7053SJung-uk Kim ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai);
23*e71b7053SJung-uk Kim BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn);
24*e71b7053SJung-uk Kim
25*e71b7053SJung-uk Kim int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_INTEGER *a);
26*e71b7053SJung-uk Kim long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a);
27*e71b7053SJung-uk Kim
28*e71b7053SJung-uk Kim int ASN1_ENUMERATED_set_int64(ASN1_INTEGER *a, int64_t r);
29*e71b7053SJung-uk Kim int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);
30*e71b7053SJung-uk Kim
31*e71b7053SJung-uk Kim ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai);
32*e71b7053SJung-uk Kim BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn);
33*e71b7053SJung-uk Kim
34*e71b7053SJung-uk Kim=head1 DESCRIPTION
35*e71b7053SJung-uk Kim
36*e71b7053SJung-uk KimThese functions convert to and from B<ASN1_INTEGER> and B<ASN1_ENUMERATED>
37*e71b7053SJung-uk Kimstructures.
38*e71b7053SJung-uk Kim
39*e71b7053SJung-uk KimASN1_INTEGER_get_int64() converts an B<ASN1_INTEGER> into an B<int64_t> type
40*e71b7053SJung-uk KimIf successful it returns 1 and sets B<*pr> to the value of B<a>. If it fails
41*e71b7053SJung-uk Kim(due to invalid type or the value being too big to fit into an B<int64_t> type)
42*e71b7053SJung-uk Kimit returns 0.
43*e71b7053SJung-uk Kim
44*e71b7053SJung-uk KimASN1_INTEGER_get_uint64() is similar to ASN1_INTEGER_get_int64_t() except it
45*e71b7053SJung-uk Kimconverts to a B<uint64_t> type and an error is returned if the passed integer
46*e71b7053SJung-uk Kimis negative.
47*e71b7053SJung-uk Kim
48*e71b7053SJung-uk KimASN1_INTEGER_get() also returns the value of B<a> but it returns 0 if B<a> is
49*e71b7053SJung-uk KimNULL and -1 on error (which is ambiguous because -1 is a legitimate value for
50*e71b7053SJung-uk Kiman B<ASN1_INTEGER>). New applications should use ASN1_INTEGER_get_int64()
51*e71b7053SJung-uk Kiminstead.
52*e71b7053SJung-uk Kim
53*e71b7053SJung-uk KimASN1_INTEGER_set_int64() sets the value of B<ASN1_INTEGER> B<a> to the
54*e71b7053SJung-uk KimB<int64_t> value B<r>.
55*e71b7053SJung-uk Kim
56*e71b7053SJung-uk KimASN1_INTEGER_set_uint64() sets the value of B<ASN1_INTEGER> B<a> to the
57*e71b7053SJung-uk KimB<uint64_t> value B<r>.
58*e71b7053SJung-uk Kim
59*e71b7053SJung-uk KimASN1_INTEGER_set() sets the value of B<ASN1_INTEGER> B<a> to the B<long> value
60*e71b7053SJung-uk KimB<v>.
61*e71b7053SJung-uk Kim
62*e71b7053SJung-uk KimBN_to_ASN1_INTEGER() converts B<BIGNUM> B<bn> to an B<ASN1_INTEGER>. If B<ai>
63*e71b7053SJung-uk Kimis NULL a new B<ASN1_INTEGER> structure is returned. If B<ai> is not NULL then
64*e71b7053SJung-uk Kimthe existing structure will be used instead.
65*e71b7053SJung-uk Kim
66*e71b7053SJung-uk KimASN1_INTEGER_to_BN() converts ASN1_INTEGER B<ai> into a B<BIGNUM>. If B<bn> is
67*e71b7053SJung-uk KimNULL a new B<BIGNUM> structure is returned. If B<bn> is not NULL then the
68*e71b7053SJung-uk Kimexisting structure will be used instead.
69*e71b7053SJung-uk Kim
70*e71b7053SJung-uk KimASN1_ENUMERATED_get_int64(), ASN1_ENUMERATED_set_int64(),
71*e71b7053SJung-uk KimASN1_ENUMERATED_set(), BN_to_ASN1_ENUMERATED() and ASN1_ENUMERATED_to_BN()
72*e71b7053SJung-uk Kimbehave in an identical way to their ASN1_INTEGER counterparts except they
73*e71b7053SJung-uk Kimoperate on an B<ASN1_ENUMERATED> value.
74*e71b7053SJung-uk Kim
75*e71b7053SJung-uk KimASN1_ENUMERATED_get() returns the value of B<a> in a similar way to
76*e71b7053SJung-uk KimASN1_INTEGER_get() but it returns B<0xffffffffL> if the value of B<a> will not
77*e71b7053SJung-uk Kimfit in a long type. New applications should use ASN1_ENUMERATED_get_int64()
78*e71b7053SJung-uk Kiminstead.
79*e71b7053SJung-uk Kim
80*e71b7053SJung-uk Kim=head1 NOTES
81*e71b7053SJung-uk Kim
82*e71b7053SJung-uk KimIn general an B<ASN1_INTEGER> or B<ASN1_ENUMERATED> type can contain an
83*e71b7053SJung-uk Kiminteger of almost arbitrary size and so cannot always be represented by a C
84*e71b7053SJung-uk KimB<int64_t> type. However in many cases (for example version numbers) they
85*e71b7053SJung-uk Kimrepresent small integers which can be more easily manipulated if converted to
86*e71b7053SJung-uk Kiman appropriate C integer type.
87*e71b7053SJung-uk Kim
88*e71b7053SJung-uk Kim=head1 BUGS
89*e71b7053SJung-uk Kim
90*e71b7053SJung-uk KimThe ambiguous return values of ASN1_INTEGER_get() and ASN1_ENUMERATED_get()
91*e71b7053SJung-uk Kimmean these functions should be avoided if possible. They are retained for
92*e71b7053SJung-uk Kimcompatibility. Normally the ambiguous return values are not legitimate
93*e71b7053SJung-uk Kimvalues for the fields they represent.
94*e71b7053SJung-uk Kim
95*e71b7053SJung-uk Kim=head1 RETURN VALUES
96*e71b7053SJung-uk Kim
97*e71b7053SJung-uk KimASN1_INTEGER_set_int64(), ASN1_INTEGER_set(), ASN1_ENUMERATED_set_int64() and
98*e71b7053SJung-uk KimASN1_ENUMERATED_set() return 1 for success and 0 for failure. They will only
99*e71b7053SJung-uk Kimfail if a memory allocation error occurs.
100*e71b7053SJung-uk Kim
101*e71b7053SJung-uk KimASN1_INTEGER_get_int64() and ASN1_ENUMERATED_get_int64() return 1 for success
102*e71b7053SJung-uk Kimand 0 for failure. They will fail if the passed type is incorrect (this will
103*e71b7053SJung-uk Kimonly happen if there is a programming error) or if the value exceeds the range
104*e71b7053SJung-uk Kimof an B<int64_t> type.
105*e71b7053SJung-uk Kim
106*e71b7053SJung-uk KimBN_to_ASN1_INTEGER() and BN_to_ASN1_ENUMERATED() return an B<ASN1_INTEGER> or
107*e71b7053SJung-uk KimB<ASN1_ENUMERATED> structure respectively or NULL if an error occurs. They will
108*e71b7053SJung-uk Kimonly fail due to a memory allocation error.
109*e71b7053SJung-uk Kim
110*e71b7053SJung-uk KimASN1_INTEGER_to_BN() and ASN1_ENUMERATED_to_BN() return a B<BIGNUM> structure
111*e71b7053SJung-uk Kimof NULL if an error occurs. They can fail if the passed type is incorrect
112*e71b7053SJung-uk Kim(due to programming error) or due to a memory allocation failure.
113*e71b7053SJung-uk Kim
114*e71b7053SJung-uk Kim=head1 SEE ALSO
115*e71b7053SJung-uk Kim
116*e71b7053SJung-uk KimL<ERR_get_error(3)>
117*e71b7053SJung-uk Kim
118*e71b7053SJung-uk Kim=head1 HISTORY
119*e71b7053SJung-uk Kim
120*e71b7053SJung-uk KimASN1_INTEGER_set_int64(), ASN1_INTEGER_get_int64(),
121*e71b7053SJung-uk KimASN1_ENUMERATED_set_int64() and ASN1_ENUMERATED_get_int64()
122*e71b7053SJung-uk Kimwere added to OpenSSL 1.1.0.
123*e71b7053SJung-uk Kim
124*e71b7053SJung-uk Kim=head1 COPYRIGHT
125*e71b7053SJung-uk Kim
126*e71b7053SJung-uk KimCopyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
127*e71b7053SJung-uk Kim
128*e71b7053SJung-uk KimLicensed under the OpenSSL license (the "License").  You may not use
129*e71b7053SJung-uk Kimthis file except in compliance with the License.  You can obtain a copy
130*e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at
131*e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>.
132*e71b7053SJung-uk Kim
133*e71b7053SJung-uk Kim=cut
134