size_t context_size, const char *context,
size_t outsize, char *out)
{
- char *pctx;
+ char *pctx = NULL;
int ret;
- if (context_size > 65535) {
+ if (context != NULL && context_size > 65535) {
gnutls_assert();
return GNUTLS_E_INVALID_REQUEST;
}
- pctx = gnutls_malloc(context_size+2);
- if (!pctx) {
- gnutls_assert();
- return GNUTLS_E_MEMORY_ERROR;
- }
+ if (context != NULL && context_size != 0) {
+ pctx = gnutls_malloc(context_size+2);
+ if (!pctx) {
+ gnutls_assert();
+ return GNUTLS_E_MEMORY_ERROR;
+ }
- _gnutls_write_uint16(context_size, (void*)pctx);
- if (context && context_size) {
memcpy(pctx+2, context, context_size);
+ _gnutls_write_uint16(context_size, (void*)pctx);
+ context_size += 2;
}
+
ret = gnutls_prf(session, label_size, label, 0,
- context_size+2, pctx, outsize, out);
+ context_size, pctx, outsize, out);
+
gnutls_free(pctx);
return ret;
}
unsigned char key_material[512];
int ret;
- TRY(13, "key expansion", 0, NULL, 34, (uint8_t*)"\x7f\x91\x8f\xf1\x66\x6d\xfb\x06\xcf\x39\x0d\x48\xea\x51\x29\x1a\x0d\x9a\x63\xde\x0f\x9f\xaf\xf5\x30\xc0\xa3\xe0\x5e\xa6\xc0\x64\x55\x43");
- TRY(6, "hello", 0, NULL, 31, (uint8_t*)"\xd4\x73\x55\xf9\xf3\xbc\x6d\x6f\xf4\x7e\x2c\x80\x16\x50\xda\x50\xdc\xc4\x39\xf7\x10\xcc\xba\x48\x94\x80\x71\x6d\x8c\x8e\xb7");
+ TRY(13, "key expansion", 0, NULL, 34, (uint8_t*)"\xcf\x3e\x1c\x03\x47\x1a\xdf\x4a\x8e\x74\xc6\xda\xcd\xda\x22\xa4\x8e\xa5\xf7\x62\xef\xd6\x47\xe7\x41\x20\xea\x44\xb8\x5d\x66\x87\x0a\x61");
+ TRY(6, "hello", 0, NULL, 31, (uint8_t*)"\x83\x6c\xc7\x8e\x1b\x62\xc7\x06\x17\x99\x37\x95\x2e\xb8\x42\x5c\x42\xcd\x75\x65\x2c\xa3\x16\x2b\xab\x0a\xcf\xfc\xc8\x90\x30");
TRY(7, "context", 5, "abcd\xfa", 31, (uint8_t*)"\x5b\xc7\x72\xe9\xda\xe4\x79\x3e\xfe\x9a\xc5\x6f\xf4\x8d\x5a\xfe\x4c\x8d\x16\xa7\xf0\x13\x13\xf1\x93\xdd\x4b\x43\x65\xc1\x94");
TRY_OLD(6, "hello", 0, NULL, 31, (uint8_t*)"\x53\x35\x9b\x1c\xbf\xf2\x50\x85\xa1\xbc\x42\xfb\x45\x92\xc3\xbe\x20\x24\x24\xe2\xeb\x6e\xf7\x4f\xc0\xee\xe3\xaa\x46\x36\xfd");