mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-06-27 15:43:42 +08:00
Add X509 name match
This commit is contained in:
@@ -541,6 +541,92 @@ static int test_asn1_utf8_string(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_asn1_string_next_code_point(void)
|
||||
{
|
||||
const uint8_t utf8[] = {
|
||||
0x41, 0xe4, 0xb8, 0xad, 0xf0, 0x9f, 0x98, 0x80
|
||||
};
|
||||
const uint8_t invalid_utf8[] = { 0xc3, 0x41 };
|
||||
const uint8_t printable[] = "Az 09?";
|
||||
const uint8_t invalid_printable[] = "*";
|
||||
const uint8_t ia5[] = "abc@example.com";
|
||||
const uint8_t invalid_ia5[] = { 0x80 };
|
||||
const uint8_t bmp[] = { 0x00, 0x41, 0x4e, 0x2d };
|
||||
const uint8_t invalid_bmp[] = { 0x00 };
|
||||
const uint8_t universal[] = {
|
||||
0x00, 0x00, 0x00, 0x41,
|
||||
0x00, 0x00, 0x4e, 0x2d,
|
||||
};
|
||||
const uint8_t invalid_universal[] = { 0x00, 0x00, 0x00 };
|
||||
const uint8_t *p = NULL;
|
||||
uint32_t cp;
|
||||
|
||||
if (asn1_utf8_string_next_code_point(utf8, sizeof(utf8), &p, &cp) != 1 || cp != 0x41
|
||||
|| asn1_utf8_string_next_code_point(utf8, sizeof(utf8), &p, &cp) != 1 || cp != 0x4e2d
|
||||
|| asn1_utf8_string_next_code_point(utf8, sizeof(utf8), &p, &cp) != 1 || cp != 0x1f600
|
||||
|| asn1_utf8_string_next_code_point(utf8, sizeof(utf8), &p, &cp) != 0) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
p = NULL;
|
||||
if (asn1_utf8_string_next_code_point(invalid_utf8, sizeof(invalid_utf8), &p, &cp) != -1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
p = NULL;
|
||||
if (asn1_printable_string_next_code_point(printable, sizeof(printable) - 1, &p, &cp) != 1 || cp != 'A'
|
||||
|| asn1_printable_string_next_code_point(printable, sizeof(printable) - 1, &p, &cp) != 1 || cp != 'z') {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
p = NULL;
|
||||
if (asn1_printable_string_next_code_point(invalid_printable, sizeof(invalid_printable) - 1, &p, &cp) != -1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
p = NULL;
|
||||
if (asn1_ia5_string_next_code_point(ia5, sizeof(ia5) - 1, &p, &cp) != 1 || cp != 'a') {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
p = NULL;
|
||||
if (asn1_ia5_string_next_code_point(invalid_ia5, sizeof(invalid_ia5), &p, &cp) != -1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
p = NULL;
|
||||
if (asn1_bmp_string_next_code_point(bmp, sizeof(bmp), &p, &cp) != 1 || cp != 0x41
|
||||
|| asn1_bmp_string_next_code_point(bmp, sizeof(bmp), &p, &cp) != 1 || cp != 0x4e2d
|
||||
|| asn1_bmp_string_next_code_point(bmp, sizeof(bmp), &p, &cp) != 0) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
p = NULL;
|
||||
if (asn1_bmp_string_next_code_point(invalid_bmp, sizeof(invalid_bmp), &p, &cp) != -1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
p = NULL;
|
||||
if (asn1_universal_string_next_code_point(universal, sizeof(universal), &p, &cp) != 1 || cp != 0x41
|
||||
|| asn1_universal_string_next_code_point(universal, sizeof(universal), &p, &cp) != 1 || cp != 0x4e2d
|
||||
|| asn1_universal_string_next_code_point(universal, sizeof(universal), &p, &cp) != 0) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
p = NULL;
|
||||
if (asn1_universal_string_next_code_point(invalid_universal, sizeof(invalid_universal), &p, &cp) != -1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_asn1_ia5_string(void)
|
||||
{
|
||||
char *tests[] = {
|
||||
@@ -849,6 +935,7 @@ int main(void)
|
||||
{
|
||||
if (test_asn1_tag() != 1) goto err;
|
||||
if (test_asn1_utf8_string() != 1) goto err;
|
||||
if (test_asn1_string_next_code_point() != 1) goto err;
|
||||
/*
|
||||
if (test_asn1_length() != 1) goto err;
|
||||
if (test_asn1_length_from_ber() != 1) goto err;
|
||||
|
||||
@@ -217,6 +217,72 @@ static int test_x509_name(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_x509_name_normalized_equ(void)
|
||||
{
|
||||
uint8_t name_a[512];
|
||||
uint8_t name_b[512];
|
||||
uint8_t name_c[512];
|
||||
uint8_t ava_a[128];
|
||||
uint8_t ava_b[128];
|
||||
uint8_t rdn_a[256];
|
||||
uint8_t rdn_b[256];
|
||||
uint8_t *p;
|
||||
size_t name_a_len = 0;
|
||||
size_t name_b_len = 0;
|
||||
size_t name_c_len = 0;
|
||||
size_t ava_a_len = 0;
|
||||
size_t ava_b_len = 0;
|
||||
size_t rdn_a_len = 0;
|
||||
size_t rdn_b_len = 0;
|
||||
|
||||
if (x509_name_add_common_name(name_a, &name_a_len, sizeof(name_a),
|
||||
ASN1_TAG_PrintableString, (uint8_t *)" CA Test ", strlen(" CA Test ")) != 1
|
||||
|| x509_name_add_common_name(name_b, &name_b_len, sizeof(name_b),
|
||||
ASN1_TAG_UTF8String, (uint8_t *)"ca test", strlen("ca test")) != 1
|
||||
|| x509_name_add_common_name(name_c, &name_c_len, sizeof(name_c),
|
||||
ASN1_TAG_UTF8String, (uint8_t *)"ca test 2", strlen("ca test 2")) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_name_normalized_equ(name_a, name_a_len, name_b, name_b_len) != 1
|
||||
|| x509_name_normalized_equ(name_a, name_a_len, name_c, name_c_len) != 0) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
p = ava_a;
|
||||
if (x509_attr_type_and_value_to_der(OID_at_organization_name, ASN1_TAG_UTF8String,
|
||||
(uint8_t *)"GmSSL", strlen("GmSSL"), &p, &ava_a_len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
p = ava_b;
|
||||
if (x509_attr_type_and_value_to_der(OID_at_organizational_unit_name, ASN1_TAG_PrintableString,
|
||||
(uint8_t *)"Test", strlen("Test"), &p, &ava_b_len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
p = rdn_a;
|
||||
if (x509_rdn_to_der(OID_at_organization_name, ASN1_TAG_UTF8String,
|
||||
(uint8_t *)"GmSSL", strlen("GmSSL"), ava_b, ava_b_len, &p, &rdn_a_len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
p = rdn_b;
|
||||
if (x509_rdn_to_der(OID_at_organizational_unit_name, ASN1_TAG_PrintableString,
|
||||
(uint8_t *)"Test", strlen("Test"), ava_a, ava_a_len, &p, &rdn_b_len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
if (x509_name_normalized_equ(rdn_a, rdn_a_len, rdn_b, rdn_b_len) != 1) {
|
||||
error_print();
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("%s() ok\n", __FUNCTION__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_x509_public_key_info(void)
|
||||
{
|
||||
int algor = OID_ec_public_key;
|
||||
@@ -445,6 +511,7 @@ int main(void)
|
||||
if (test_x509_attr_type_and_value() != 1) goto err;
|
||||
if (test_x509_rdn() != 1) goto err;
|
||||
if (test_x509_name() != 1) goto err;
|
||||
if (test_x509_name_normalized_equ() != 1) goto err;
|
||||
if (test_x509_public_key_info() != 1) {
|
||||
error_print();
|
||||
goto err;
|
||||
|
||||
Reference in New Issue
Block a user