BOOL certificate_read_server_certificate(rdpCertificate* certificate, BYTE* server_cert, int length) { BOOL ret; wStream* s; UINT32 dwVersion; if (length < 4) /* NULL certificate is not an error see #1795 */ return TRUE; s = Stream_New(server_cert, length); Stream_Read_UINT32(s, dwVersion); /* dwVersion (4 bytes) */ switch (dwVersion & CERT_CHAIN_VERSION_MASK) { case CERT_CHAIN_VERSION_1: ret = certificate_read_server_proprietary_certificate(certificate, s); break; case CERT_CHAIN_VERSION_2: ret = certificate_read_server_x509_certificate_chain(certificate, s); break; default: WLog_ERR(TAG, "invalid certificate chain version:%d", dwVersion & CERT_CHAIN_VERSION_MASK); ret = FALSE; break; } Stream_Free(s, FALSE); return ret; }
boolean certificate_read_server_certificate(rdpCertificate* certificate, uint8* server_cert, int length) { STREAM* s; uint32 dwVersion; s = stream_new(0); s->p = s->data = server_cert; if (length < 1) { printf("null server certificate\n"); return false; } stream_read_uint32(s, dwVersion); /* dwVersion (4 bytes) */ switch (dwVersion & CERT_CHAIN_VERSION_MASK) { case CERT_CHAIN_VERSION_1: certificate_read_server_proprietary_certificate(certificate, s); break; case CERT_CHAIN_VERSION_2: certificate_read_server_x509_certificate_chain(certificate, s); break; default: printf("invalid certificate chain version:%d\n", dwVersion & CERT_CHAIN_VERSION_MASK); break; } xfree(s); return true; }
BOOL certificate_read_server_certificate(rdpCertificate* certificate, BYTE* server_cert, int length) { STREAM* s; UINT32 dwVersion; if (length < 1) { DEBUG_CERTIFICATE("null server certificate\n"); return FALSE; } s = stream_new(0); stream_attach(s, server_cert, length); stream_read_UINT32(s, dwVersion); /* dwVersion (4 bytes) */ switch (dwVersion & CERT_CHAIN_VERSION_MASK) { case CERT_CHAIN_VERSION_1: certificate_read_server_proprietary_certificate(certificate, s); break; case CERT_CHAIN_VERSION_2: certificate_read_server_x509_certificate_chain(certificate, s); break; default: printf("invalid certificate chain version:%d\n", dwVersion & CERT_CHAIN_VERSION_MASK); break; } free(s); return TRUE; }
int certificate_read_server_certificate(rdpCertificate* certificate, BYTE* server_cert, int length) { wStream* s; UINT32 dwVersion; int status = 1; if (length < 1) { DEBUG_CERTIFICATE("null server certificate\n"); return 0; } if (length < 4) return -1; s = stream_new(0); stream_attach(s, server_cert, length); stream_read_UINT32(s, dwVersion); /* dwVersion (4 bytes) */ switch (dwVersion & CERT_CHAIN_VERSION_MASK) { case CERT_CHAIN_VERSION_1: status = certificate_read_server_proprietary_certificate(certificate, s); break; case CERT_CHAIN_VERSION_2: status = certificate_read_server_x509_certificate_chain(certificate, s); break; default: fprintf(stderr, "invalid certificate chain version:%d\n", dwVersion & CERT_CHAIN_VERSION_MASK); status = -1; break; } free(s); return status; }