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