test
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24779 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		@@ -176,6 +176,42 @@ decrypt_token(struct client *client, int32_t hContext, int flags,
 | 
				
			|||||||
    return val;
 | 
					    return val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int32_t
 | 
				
			||||||
 | 
					wrap_token_ext(struct client *client, int32_t hContext, int32_t flags,
 | 
				
			||||||
 | 
						       int32_t bflags, krb5_data *header, krb5_data *in, krb5_data *trailer,
 | 
				
			||||||
 | 
						       krb5_data *out)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int32_t val;
 | 
				
			||||||
 | 
					    put32(client, eWrapExt);
 | 
				
			||||||
 | 
					    put32(client, hContext);
 | 
				
			||||||
 | 
					    put32(client, flags);
 | 
				
			||||||
 | 
					    put32(client, bflags);
 | 
				
			||||||
 | 
					    putdata(client, *header);
 | 
				
			||||||
 | 
					    putdata(client, *in);
 | 
				
			||||||
 | 
					    putdata(client, *trailer);
 | 
				
			||||||
 | 
					    ret32(client, val);
 | 
				
			||||||
 | 
					    retdata(client, *out);
 | 
				
			||||||
 | 
					    return val;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int32_t
 | 
				
			||||||
 | 
					unwrap_token_ext(struct client *client, int32_t hContext, int32_t flags,
 | 
				
			||||||
 | 
						       int32_t bflags, krb5_data *header, krb5_data *in, krb5_data *trailer,
 | 
				
			||||||
 | 
						       krb5_data *out)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int32_t val;
 | 
				
			||||||
 | 
					    put32(client, eUnwrapExt);
 | 
				
			||||||
 | 
					    put32(client, hContext);
 | 
				
			||||||
 | 
					    put32(client, flags);
 | 
				
			||||||
 | 
					    put32(client, bflags);
 | 
				
			||||||
 | 
					    putdata(client, *header);
 | 
				
			||||||
 | 
					    putdata(client, *in);
 | 
				
			||||||
 | 
					    putdata(client, *trailer);
 | 
				
			||||||
 | 
					    ret32(client, val);
 | 
				
			||||||
 | 
					    retdata(client, *out);
 | 
				
			||||||
 | 
					    return val;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int32_t
 | 
					static int32_t
 | 
				
			||||||
get_mic(struct client *client, int32_t hContext,
 | 
					get_mic(struct client *client, int32_t hContext,
 | 
				
			||||||
	krb5_data *in, krb5_data *mic)
 | 
						krb5_data *in, krb5_data *mic)
 | 
				
			||||||
@@ -430,6 +466,52 @@ test_wrap(struct client *c1, int32_t hc1, struct client *c2, int32_t hc2,
 | 
				
			|||||||
    return val;
 | 
					    return val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int32_t
 | 
				
			||||||
 | 
					test_wrap_ext(struct client *c1, int32_t hc1, struct client *c2, int32_t hc2,
 | 
				
			||||||
 | 
						      int conf, int bflags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    krb5_data header, msg, trailer, wrapped, out;
 | 
				
			||||||
 | 
					    int32_t val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    header.data = "header";
 | 
				
			||||||
 | 
					    header.length = 6;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg.data = "0123456789abcdef"; /* padded for most enctypes */
 | 
				
			||||||
 | 
					    msg.length = 32;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    trailer.data = "trailer";
 | 
				
			||||||
 | 
					    trailer.length = 7;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    krb5_data_zero(&wrapped);
 | 
				
			||||||
 | 
					    krb5_data_zero(&out);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    val = wrap_token_ext(c1, hc1, conf, bflags, &header, &msg, &trailer, &wrapped);
 | 
				
			||||||
 | 
					    if (val) {
 | 
				
			||||||
 | 
						warnx("encrypt_token failed to host: %s", c1->moniker);
 | 
				
			||||||
 | 
						return val;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    val = unwrap_token_ext(c2, hc2, conf, bflags, &header, &wrapped, &trailer, &out);
 | 
				
			||||||
 | 
					    if (val) {
 | 
				
			||||||
 | 
						krb5_data_free(&wrapped);
 | 
				
			||||||
 | 
						warnx("decrypt_token failed to host: %s", c2->moniker);
 | 
				
			||||||
 | 
						return val;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (msg.length != out.length) {
 | 
				
			||||||
 | 
						warnx("decrypted'ed token have wrong length (%lu != %lu)",
 | 
				
			||||||
 | 
						      (unsigned long)msg.length, (unsigned long)out.length);
 | 
				
			||||||
 | 
						val = GSMERR_ERROR;
 | 
				
			||||||
 | 
					    } else if (memcmp(msg.data, out.data, msg.length) != 0) {
 | 
				
			||||||
 | 
						warnx("decryptd'ed token have wrong data");
 | 
				
			||||||
 | 
						val = GSMERR_ERROR;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    krb5_data_free(&wrapped);
 | 
				
			||||||
 | 
					    krb5_data_free(&out);
 | 
				
			||||||
 | 
					    return val;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int32_t
 | 
					static int32_t
 | 
				
			||||||
test_token(struct client *c1, int32_t hc1, struct client *c2, int32_t hc2)
 | 
					test_token(struct client *c1, int32_t hc1, struct client *c2, int32_t hc2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -437,16 +519,42 @@ test_token(struct client *c1, int32_t hc1, struct client *c2, int32_t hc2)
 | 
				
			|||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (i = 0; i < 10; i++) {
 | 
					    for (i = 0; i < 10; i++) {
 | 
				
			||||||
 | 
						/* mic */
 | 
				
			||||||
	test_mic(c1, hc1, c2, hc2);
 | 
						test_mic(c1, hc1, c2, hc2);
 | 
				
			||||||
	test_mic(c2, hc2, c1, hc1);
 | 
						test_mic(c2, hc2, c1, hc1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* wrap */
 | 
				
			||||||
	val = test_wrap(c1, hc1, c2, hc2, 0);
 | 
						val = test_wrap(c1, hc1, c2, hc2, 0);
 | 
				
			||||||
	if (val) return val;
 | 
						if (val) return val;
 | 
				
			||||||
	val = test_wrap(c2, hc2, c1, hc1, 0);
 | 
						val = test_wrap(c2, hc2, c1, hc1, 0);
 | 
				
			||||||
	if (val) return val;
 | 
						if (val) return val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	val = test_wrap(c1, hc1, c2, hc2, 1);
 | 
						val = test_wrap(c1, hc1, c2, hc2, 1);
 | 
				
			||||||
	if (val) return val;
 | 
						if (val) return val;
 | 
				
			||||||
	val = test_wrap(c2, hc2, c1, hc1, 1);
 | 
						val = test_wrap(c2, hc2, c1, hc1, 1);
 | 
				
			||||||
	if (val) return val;
 | 
						if (val) return val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* wrap ext */
 | 
				
			||||||
 | 
						val = test_wrap_ext(c1, hc1, c2, hc2, 1, 0);
 | 
				
			||||||
 | 
						if (val) return val;
 | 
				
			||||||
 | 
						val = test_wrap_ext(c2, hc2, c1, hc1, 1, 0);
 | 
				
			||||||
 | 
						if (val) return val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						val = test_wrap_ext(c1, hc1, c2, hc2, 1, 1);
 | 
				
			||||||
 | 
						if (val) return val;
 | 
				
			||||||
 | 
						val = test_wrap_ext(c2, hc2, c1, hc1, 1, 1);
 | 
				
			||||||
 | 
						if (val) return val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						val = test_wrap_ext(c1, hc1, c2, hc2, 0, 0);
 | 
				
			||||||
 | 
						if (val) return val;
 | 
				
			||||||
 | 
						val = test_wrap_ext(c2, hc2, c1, hc1, 0, 0);
 | 
				
			||||||
 | 
						if (val) return val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						val = test_wrap_ext(c1, hc1, c2, hc2, 0, 1);
 | 
				
			||||||
 | 
						if (val) return val;
 | 
				
			||||||
 | 
						val = test_wrap_ext(c2, hc2, c1, hc1, 0, 1);
 | 
				
			||||||
 | 
						if (val) return val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return GSMERR_OK;
 | 
					    return GSMERR_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user