From 64eacda62e6d24e14be9fd37fbee6e1f0125f362 Mon Sep 17 00:00:00 2001 From: David Reid Date: Fri, 18 Oct 2013 12:09:55 -0700 Subject: ASN1 because someone had to do it. Refs #77 --- cryptography/bindings/openssl/api.py | 1 + cryptography/bindings/openssl/asn1.py | 114 ++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 cryptography/bindings/openssl/asn1.py diff --git a/cryptography/bindings/openssl/api.py b/cryptography/bindings/openssl/api.py index 79ec5eea..2a6d38e6 100644 --- a/cryptography/bindings/openssl/api.py +++ b/cryptography/bindings/openssl/api.py @@ -25,6 +25,7 @@ class API(object): OpenSSL API wrapper. """ _modules = [ + "asn1", "bignum", "bio", "conf", diff --git a/cryptography/bindings/openssl/asn1.py b/cryptography/bindings/openssl/asn1.py new file mode 100644 index 00000000..fad13ee4 --- /dev/null +++ b/cryptography/bindings/openssl/asn1.py @@ -0,0 +1,114 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +INCLUDES = """ +#include +""" + +TYPES = """ +typedef ... time_t; + +typedef int ASN1_BOOLEAN; +typedef ... ASN1_INTEGER; + +struct asn1_string_st { + int length; + int type; + unsigned char *data; + long flags; +}; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef ... ASN1_OBJECT; +typedef ... ASN1_STRING; +typedef ... ASN1_TYPE; +typedef ... ASN1_GENERALIZEDTIME; +typedef ... ASN1_ENUMERATED; +typedef ... ASN1_ITEM; +typedef ... ASN1_VALUE; + +typedef struct { + ...; +} ASN1_TIME; +typedef const ASN1_ITEM ASN1_ITEM_EXP; + +typedef ... ASN1_UTCTIME; + +static const int V_ASN1_GENERALIZEDTIME; + +static const int MBSTRING_UTF8; +""" + +FUNCTIONS = """ +ASN1_OBJECT *ASN1_OBJECT_new(); +void ASN1_OBJECT_free(ASN1_OBJECT *); + +/* ASN1 OBJECT IDENTIFIER */ +ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **, const unsigned char **, long); +int i2d_ASN1_OBJECT(ASN1_OBJECT *, unsigned char **); + +/* ASN1 STRING */ +ASN1_STRING *ASN1_STRING_new(); +ASN1_STRING *ASN1_STRING_type_new(int); +void ASN1_STRING_free(ASN1_STRING *); +int ASN1_STRING_length(ASN1_STRING *); +unsigned char *ASN1_STRING_data(ASN1_STRING *); +ASN1_STRING *ASN1_STRING_dup(ASN1_STRING *); +int ASN1_STRING_cmp(ASN1_STRING *, ASN1_STRING *); +int ASN1_STRING_set(ASN1_STRING *, const void *, int); +int ASN1_STRING_type(ASN1_STRING *); +int ASN1_STRING_to_UTF8(unsigned char **, ASN1_STRING *); + +/* ASN1 OCTET STRING */ +ASN1_OCTET_STRING *ASN1_OCTET_STRING_new(); +void ASN1_OCTET_STRING_free(ASN1_OCTET_STRING *); +ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *); +int ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *, ASN1_OCTET_STRING *); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *, const unsigned char *, int); + +/* ASN1 INTEGER */ +ASN1_INTEGER *ASN1_INTEGER_new(); +void ASN1_INTEGER_free(ASN1_INTEGER *); +ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *); +int ASN1_INTEGER_cmp(ASN1_INTEGER *, ASN1_INTEGER *); +int ASN1_INTEGER_set(ASN1_INTEGER *, long); +long ASN1_INTEGER_get(ASN1_INTEGER *); +BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *,BIGNUM *); +int i2a_ASN1_INTEGER(BIO *, ASN1_INTEGER *); + +/* ASN1 TIME */ +ASN1_TIME *ASN1_TIME_new(); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *, + ASN1_GENERALIZEDTIME **); + +/* ASN1 UTCTIME */ +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *, time_t); + +/* ASN1 GENERALIZEDTIME */ +int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *, const char *); +void ASN1_GENERALIZEDTIME_free(ASN1_GENERALIZEDTIME *); +int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *); + +/* ASN1 ENUMERATED */ +ASN1_ENUMERATED *ASN1_ENUMERATED_new(); +void ASN1_ENUMERATED_free(ASN1_ENUMERATED *); +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *, long); + +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **, const unsigned char **, long, + const ASN1_ITEM *); +""" + +MACROS = """ +ASN1_TIME *M_ASN1_TIME_dup(void *); +ASN1_ITEM *ASN1_ITEM_ptr(ASN1_ITEM *); +""" -- cgit v1.2.3 From b3fcc9b732282588c25f76aac2182e46704ca656 Mon Sep 17 00:00:00 2001 From: David Reid Date: Fri, 18 Oct 2013 14:18:36 -0700 Subject: Move some stuff that doesn't pass verification because reasons to the MACROS section. --- cryptography/bindings/openssl/asn1.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/cryptography/bindings/openssl/asn1.py b/cryptography/bindings/openssl/asn1.py index fad13ee4..4bc56882 100644 --- a/cryptography/bindings/openssl/asn1.py +++ b/cryptography/bindings/openssl/asn1.py @@ -61,10 +61,7 @@ int i2d_ASN1_OBJECT(ASN1_OBJECT *, unsigned char **); ASN1_STRING *ASN1_STRING_new(); ASN1_STRING *ASN1_STRING_type_new(int); void ASN1_STRING_free(ASN1_STRING *); -int ASN1_STRING_length(ASN1_STRING *); unsigned char *ASN1_STRING_data(ASN1_STRING *); -ASN1_STRING *ASN1_STRING_dup(ASN1_STRING *); -int ASN1_STRING_cmp(ASN1_STRING *, ASN1_STRING *); int ASN1_STRING_set(ASN1_STRING *, const void *, int); int ASN1_STRING_type(ASN1_STRING *); int ASN1_STRING_to_UTF8(unsigned char **, ASN1_STRING *); @@ -72,18 +69,12 @@ int ASN1_STRING_to_UTF8(unsigned char **, ASN1_STRING *); /* ASN1 OCTET STRING */ ASN1_OCTET_STRING *ASN1_OCTET_STRING_new(); void ASN1_OCTET_STRING_free(ASN1_OCTET_STRING *); -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *); -int ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *, ASN1_OCTET_STRING *); int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *, const unsigned char *, int); /* ASN1 INTEGER */ ASN1_INTEGER *ASN1_INTEGER_new(); void ASN1_INTEGER_free(ASN1_INTEGER *); -ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *); -int ASN1_INTEGER_cmp(ASN1_INTEGER *, ASN1_INTEGER *); int ASN1_INTEGER_set(ASN1_INTEGER *, long); -long ASN1_INTEGER_get(ASN1_INTEGER *); -BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *,BIGNUM *); int i2a_ASN1_INTEGER(BIO *, ASN1_INTEGER *); /* ASN1 TIME */ @@ -111,4 +102,19 @@ ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **, const unsigned char **, long, MACROS = """ ASN1_TIME *M_ASN1_TIME_dup(void *); ASN1_ITEM *ASN1_ITEM_ptr(ASN1_ITEM *); + +/* These aren't macros these arguments are all const X on openssl > 1.0.x */ + +int ASN1_STRING_length(ASN1_STRING *); +ASN1_STRING *ASN1_STRING_dup(ASN1_STRING *); +int ASN1_STRING_cmp(ASN1_STRING *, ASN1_STRING *); + +ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *); +int ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *, ASN1_OCTET_STRING *); + +ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *); +int ASN1_INTEGER_cmp(ASN1_INTEGER *, ASN1_INTEGER *); +long ASN1_INTEGER_get(ASN1_INTEGER *); + +BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *,BIGNUM *); """ -- cgit v1.2.3 From 5e7ce71db729964cc60e2113e8264a0b06c38ef9 Mon Sep 17 00:00:00 2001 From: David Reid Date: Fri, 18 Oct 2013 15:33:58 -0700 Subject: More whitespace for great good. --- cryptography/bindings/openssl/asn1.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cryptography/bindings/openssl/asn1.py b/cryptography/bindings/openssl/asn1.py index 4bc56882..1edcd449 100644 --- a/cryptography/bindings/openssl/asn1.py +++ b/cryptography/bindings/openssl/asn1.py @@ -27,6 +27,7 @@ struct asn1_string_st { unsigned char *data; long flags; }; + typedef struct asn1_string_st ASN1_OCTET_STRING; typedef struct asn1_string_st ASN1_IA5STRING; typedef ... ASN1_OBJECT; -- cgit v1.2.3 From 85ec8dbb659c1679fca703d719e2e27ad9d5a135 Mon Sep 17 00:00:00 2001 From: David Reid Date: Fri, 18 Oct 2013 17:04:01 -0700 Subject: Add a space between arguments per the style guide. --- cryptography/bindings/openssl/asn1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cryptography/bindings/openssl/asn1.py b/cryptography/bindings/openssl/asn1.py index 1edcd449..5bd72e9a 100644 --- a/cryptography/bindings/openssl/asn1.py +++ b/cryptography/bindings/openssl/asn1.py @@ -117,5 +117,5 @@ ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *); int ASN1_INTEGER_cmp(ASN1_INTEGER *, ASN1_INTEGER *); long ASN1_INTEGER_get(ASN1_INTEGER *); -BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *,BIGNUM *); +BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *, BIGNUM *); """ -- cgit v1.2.3