iPXE
pccrc_test.c File Reference

Peer Content Caching and Retrieval: Content Identification [MS-PCCRC] tests. More...

#include <stdint.h>
#include <string.h>
#include <assert.h>
#include <ipxe/pccrc.h>
#include <ipxe/sha256.h>
#include <ipxe/sha512.h>
#include <ipxe/hmac.h>
#include <ipxe/test.h>

Go to the source code of this file.

Data Structures

struct  peerdist_info_test
 A content information test. More...
struct  peerdist_info_segment_test
 A content information segment test. More...
struct  peerdist_info_block_test
 A content information block test. More...

Macros

#define DATA(...)
 Define inline raw data.
#define RANGE(START, END)
 Define an inline content range.
#define TRIM(START, END)
 Define an inline trimmed content range.
#define PEERDIST_INFO_TEST(name, DATA, DIGEST, DIGESTSIZE, RANGE, TRIM, SEGMENTS)
 Define a content information test.
#define PEERDIST_INFO_SEGMENT_TEST(name, INDEX, RANGE, BLOCKS, BLKSIZE, HASH, SECRET, ID)
 Define a content information segment test.
#define PEERDIST_INFO_BLOCK_TEST(name, INDEX, RANGE, TRIM, HASH)
 Define a content information block test.
#define SERVER_PASSPHRASE(name, DATA)
 Define a server passphrase.
#define peerdist_info_ok(test, info)
#define peerdist_info_segment_ok(test, info, segment)
#define peerdist_info_block_ok(test, segment, block)
#define peerdist_info_passphrase_ok(test, info, pass, pass_len)

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 SERVER_PASSPHRASE (passphrase, DATA(0x2a, 0x3d, 0x73, 0xeb, 0x43, 0x5e, 0x9f, 0x2b, 0x8a, 0x34, 0x42, 0x67, 0xe7, 0x46, 0x7a, 0x3c, 0x73, 0x85, 0xc6, 0xe0, 0x55, 0xe2, 0xb4, 0xd3, 0x0d, 0xfe, 0xc7, 0xc3, 0x8b, 0x0e, 0xd7, 0x2c))
 Server passphrase used for these test vectors.
 PEERDIST_INFO_TEST (iis_85_png_v1, DATA(0x00, 0x01, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x85, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xd8, 0xd9, 0x76, 0x35, 0x4a, 0x48, 0x72, 0xe9, 0x25, 0x76, 0x18, 0x03, 0xf4, 0x58, 0xd9, 0xda, 0xaa, 0x67, 0xf8, 0xe3, 0x1c, 0x63, 0x0f, 0xb7, 0x4e, 0x6a, 0x31, 0x2e, 0xf8, 0xa2, 0x5a, 0xba, 0x11, 0xaf, 0xc0, 0xd7, 0x94, 0x92, 0x43, 0xf9, 0x4f, 0x9c, 0x1f, 0xab, 0x35, 0xd9, 0xfd, 0x1e, 0x33, 0x1f, 0xcf, 0x78, 0x11, 0xa2, 0xe0, 0x1d, 0x35, 0x87, 0xb3, 0x8d, 0x77, 0x0a, 0x29, 0xe2, 0x02, 0x00, 0x00, 0x00, 0x73, 0xc1, 0x8a, 0xb8, 0x54, 0x91, 0x10, 0xf8, 0xe9, 0x0e, 0x71, 0xbb, 0xc3, 0xab, 0x2a, 0xa8, 0xc4, 0x4d, 0x13, 0xf4, 0x92, 0x94, 0x99, 0x25, 0x5b, 0x66, 0x0f, 0x24, 0xec, 0x77, 0x80, 0x0b, 0x97, 0x4b, 0xdd, 0x65, 0x56, 0x7f, 0xde, 0xec, 0xcd, 0xaf, 0xe4, 0x57, 0xa9, 0x50, 0x3b, 0x45, 0x48, 0xf6, 0x6e, 0xd3, 0xb1, 0x88, 0xdc, 0xfd, 0xa0, 0xac, 0x38, 0x2b, 0x09, 0x71, 0x1a, 0xcc), &sha256_algorithm, 32, RANGE(0, 99710), TRIM(0, 99710), 1)
 IIS logo (iis-85.png) content information version 1.
 PEERDIST_INFO_SEGMENT_TEST (iis_85_png_v1_s0, 0, RANGE(0, 99710), 2, 65536, DATA(0xd8, 0xd9, 0x76, 0x35, 0x4a, 0x48, 0x72, 0xe9, 0x25, 0x76, 0x18, 0x03, 0xf4, 0x58, 0xd9, 0xda, 0xaa, 0x67, 0xf8, 0xe3, 0x1c, 0x63, 0x0f, 0xb7, 0x4e, 0x6a, 0x31, 0x2e, 0xf8, 0xa2, 0x5a, 0xba), DATA(0x11, 0xaf, 0xc0, 0xd7, 0x94, 0x92, 0x43, 0xf9, 0x4f, 0x9c, 0x1f, 0xab, 0x35, 0xd9, 0xfd, 0x1e, 0x33, 0x1f, 0xcf, 0x78, 0x11, 0xa2, 0xe0, 0x1d, 0x35, 0x87, 0xb3, 0x8d, 0x77, 0x0a, 0x29, 0xe2), DATA(0x49, 0x1b, 0x21, 0x7d, 0xbe, 0xe2, 0xb5, 0xf1, 0x2c, 0xa7, 0x9b, 0x01, 0x5e, 0x06, 0xf4, 0xbb, 0xe6, 0x4f, 0x97, 0x45, 0xba, 0xd7, 0x86, 0x7a, 0xef, 0x17, 0xde, 0x59, 0x92, 0x7e, 0xdc, 0xe9))
 IIS logo (iis-85.png) content information version 1 segment 0.
 PEERDIST_INFO_BLOCK_TEST (iis_85_png_v1_s0_b0, 0, RANGE(0, 65536), TRIM(0, 65536), DATA(0x73, 0xc1, 0x8a, 0xb8, 0x54, 0x91, 0x10, 0xf8, 0xe9, 0x0e, 0x71, 0xbb, 0xc3, 0xab, 0x2a, 0xa8, 0xc4, 0x4d, 0x13, 0xf4, 0x92, 0x94, 0x99, 0x25, 0x5b, 0x66, 0x0f, 0x24, 0xec, 0x77, 0x80, 0x0b))
 IIS logo (iis-85.png) content information version 1 segment 0 block 0.
 PEERDIST_INFO_BLOCK_TEST (iis_85_png_v1_s0_b1, 1, RANGE(65536, 99710), TRIM(65536, 99710), DATA(0x97, 0x4b, 0xdd, 0x65, 0x56, 0x7f, 0xde, 0xec, 0xcd, 0xaf, 0xe4, 0x57, 0xa9, 0x50, 0x3b, 0x45, 0x48, 0xf6, 0x6e, 0xd3, 0xb1, 0x88, 0xdc, 0xfd, 0xa0, 0xac, 0x38, 0x2b, 0x09, 0x71, 0x1a, 0xcc))
 IIS logo (iis-85.png) content information version 1 segment 0 block 1.
 PEERDIST_INFO_TEST (iis_85_png_v2, DATA(0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x99, 0xde, 0xe0, 0xd0, 0xc3, 0x58, 0xe2, 0x68, 0x4b, 0x62, 0x33, 0x0d, 0x32, 0xb5, 0xf1, 0x97, 0x87, 0x24, 0xa0, 0xd0, 0xa5, 0x2b, 0xdc, 0x5e, 0x78, 0x1f, 0xae, 0x71, 0xff, 0x57, 0xa8, 0xbe, 0x3d, 0xd4, 0x58, 0x03, 0x7e, 0xd4, 0x04, 0x11, 0x6b, 0xb6, 0x16, 0xd9, 0xb1, 0x41, 0x16, 0x08, 0x85, 0x20, 0xc4, 0x7c, 0xdc, 0x50, 0xab, 0xce, 0xa3, 0xfa, 0xe1, 0x88, 0xa9, 0x8e, 0xa2, 0x2d, 0xf3, 0xc0, 0x00, 0x00, 0xeb, 0xa0, 0x33, 0x81, 0xd0, 0xd0, 0xcb, 0x74, 0xf4, 0xb6, 0x13, 0xd8, 0x21, 0x0f, 0x37, 0xf0, 0x02, 0xa0, 0x6f, 0x39, 0x10, 0x58, 0x60, 0x96, 0xa1, 0x30, 0xd3, 0x43, 0x98, 0xc0, 0x8e, 0x66, 0xd7, 0xbc, 0xb8, 0xb6, 0xeb, 0x77, 0x83, 0xe4, 0xf8, 0x07, 0x64, 0x7b, 0x63, 0xf1, 0x46, 0xb5, 0x2f, 0x4a, 0xc8, 0x9c, 0xcc, 0x7a, 0xbf, 0x5f, 0xa1, 0x1a, 0xca, 0xfc, 0x2a, 0xcf, 0x50, 0x28, 0x58, 0x6c), &sha512_algorithm, 32, RANGE(0, 99710), TRIM(0, 99710), 2)
 IIS logo (iis-85.png) content information version 2.
 PEERDIST_INFO_SEGMENT_TEST (iis_85_png_v2_s0, 0, RANGE(0, 39390), 1, 39390, DATA(0xe0, 0xd0, 0xc3, 0x58, 0xe2, 0x68, 0x4b, 0x62, 0x33, 0x0d, 0x32, 0xb5, 0xf1, 0x97, 0x87, 0x24, 0xa0, 0xd0, 0xa5, 0x2b, 0xdc, 0x5e, 0x78, 0x1f, 0xae, 0x71, 0xff, 0x57, 0xa8, 0xbe, 0x3d, 0xd4), DATA(0x58, 0x03, 0x7e, 0xd4, 0x04, 0x11, 0x6b, 0xb6, 0x16, 0xd9, 0xb1, 0x41, 0x16, 0x08, 0x85, 0x20, 0xc4, 0x7c, 0xdc, 0x50, 0xab, 0xce, 0xa3, 0xfa, 0xe1, 0x88, 0xa9, 0x8e, 0xa2, 0x2d, 0xf3, 0xc0), DATA(0x33, 0x71, 0xbb, 0xea, 0xdd, 0xb6, 0x23, 0x53, 0xad, 0xce, 0xf9, 0x70, 0xa0, 0x6f, 0xdf, 0x65, 0x00, 0x1e, 0x04, 0x21, 0xf4, 0xc7, 0x10, 0x82, 0x76, 0xb0, 0xc3, 0x7a, 0x9f, 0x9e, 0xc1, 0x0f))
 IIS logo (iis-85.png) content information version 2 segment 0.
 PEERDIST_INFO_BLOCK_TEST (iis_85_png_v2_s0_b0, 0, RANGE(0, 39390), TRIM(0, 39390), DATA(0xe0, 0xd0, 0xc3, 0x58, 0xe2, 0x68, 0x4b, 0x62, 0x33, 0x0d, 0x32, 0xb5, 0xf1, 0x97, 0x87, 0x24, 0xa0, 0xd0, 0xa5, 0x2b, 0xdc, 0x5e, 0x78, 0x1f, 0xae, 0x71, 0xff, 0x57, 0xa8, 0xbe, 0x3d, 0xd4))
 IIS logo (iis-85.png) content information version 2 segment 0 block 0.
 PEERDIST_INFO_SEGMENT_TEST (iis_85_png_v2_s1, 1, RANGE(39390, 99710), 1, 60320, DATA(0x33, 0x81, 0xd0, 0xd0, 0xcb, 0x74, 0xf4, 0xb6, 0x13, 0xd8, 0x21, 0x0f, 0x37, 0xf0, 0x02, 0xa0, 0x6f, 0x39, 0x10, 0x58, 0x60, 0x96, 0xa1, 0x30, 0xd3, 0x43, 0x98, 0xc0, 0x8e, 0x66, 0xd7, 0xbc), DATA(0xb8, 0xb6, 0xeb, 0x77, 0x83, 0xe4, 0xf8, 0x07, 0x64, 0x7b, 0x63, 0xf1, 0x46, 0xb5, 0x2f, 0x4a, 0xc8, 0x9c, 0xcc, 0x7a, 0xbf, 0x5f, 0xa1, 0x1a, 0xca, 0xfc, 0x2a, 0xcf, 0x50, 0x28, 0x58, 0x6c), DATA(0xd7, 0xe9, 0x24, 0x42, 0x5e, 0x8f, 0x4f, 0x88, 0xf0, 0x1d, 0xc6, 0xa9, 0xbb, 0x1b, 0xc3, 0x7b, 0xe1, 0x13, 0xec, 0x79, 0x17, 0xc7, 0x45, 0xd4, 0x96, 0x5c, 0x2b, 0x55, 0xfa, 0x16, 0x3a, 0x6e))
 IIS logo (iis-85.png) content information version 2 segment 1.
 PEERDIST_INFO_BLOCK_TEST (iis_85_png_v2_s1_b0, 0, RANGE(39390, 99710), TRIM(39390, 99710), DATA(0x33, 0x81, 0xd0, 0xd0, 0xcb, 0x74, 0xf4, 0xb6, 0x13, 0xd8, 0x21, 0x0f, 0x37, 0xf0, 0x02, 0xa0, 0x6f, 0x39, 0x10, 0x58, 0x60, 0x96, 0xa1, 0x30, 0xd3, 0x43, 0x98, 0xc0, 0x8e, 0x66, 0xd7, 0xbc))
 IIS logo (iis-85.png) content information version 2 segment 1 block 0.
static void peerdist_info_okx (struct peerdist_info_test *test, struct peerdist_info *info, const char *file, unsigned int line)
 Report content information test result.
static void peerdist_info_segment_okx (struct peerdist_info_segment_test *test, const struct peerdist_info *info, struct peerdist_info_segment *segment, const char *file, unsigned int line)
 Report content information segment test result.
static void peerdist_info_block_okx (struct peerdist_info_block_test *test, const struct peerdist_info_segment *segment, struct peerdist_info_block *block, const char *file, unsigned int line)
 Report content information block test result.
static void peerdist_info_passphrase_okx (struct peerdist_info_segment_test *test, const struct peerdist_info *info, uint8_t *pass, size_t pass_len, const char *file, unsigned int line)
 Report server passphrase test result.
static void peerdist_info_test_exec (void)
 Perform content information self-tests.

Variables

struct self_test peerdist_info_test __self_test
 Content information self-test.

Detailed Description

Peer Content Caching and Retrieval: Content Identification [MS-PCCRC] tests.

Definition in file pccrc_test.c.

Macro Definition Documentation

◆ DATA

#define DATA ( ...)
Value:
{ __VA_ARGS__ }

Define inline raw data.

Definition at line 45 of file pccrc_test.c.

◆ RANGE

#define RANGE ( START,
END )
Value:
{ .start = START, .end = END }

Define an inline content range.

Parameters
STARTStart offset
ENDEnd offset
Return values
rangeContent range

Definition at line 54 of file pccrc_test.c.

Referenced by PEERDIST_INFO_BLOCK_TEST(), PEERDIST_INFO_BLOCK_TEST(), PEERDIST_INFO_BLOCK_TEST(), PEERDIST_INFO_BLOCK_TEST(), PEERDIST_INFO_SEGMENT_TEST(), PEERDIST_INFO_SEGMENT_TEST(), PEERDIST_INFO_SEGMENT_TEST(), PEERDIST_INFO_TEST(), and PEERDIST_INFO_TEST().

◆ TRIM

#define TRIM ( START,
END )
Value:
{ .start = START, .end = END }

Define an inline trimmed content range.

Parameters
STARTStart offset
ENDEnd offset
Return values
trimTrimmed content range

Definition at line 63 of file pccrc_test.c.

Referenced by PEERDIST_INFO_BLOCK_TEST(), PEERDIST_INFO_BLOCK_TEST(), PEERDIST_INFO_BLOCK_TEST(), PEERDIST_INFO_BLOCK_TEST(), PEERDIST_INFO_TEST(), and PEERDIST_INFO_TEST().

◆ PEERDIST_INFO_TEST

#define PEERDIST_INFO_TEST ( name,
DATA,
DIGEST,
DIGESTSIZE,
RANGE,
TRIM,
SEGMENTS )
Value:
static const uint8_t name ## _data[] = DATA; \
static struct peerdist_info_test name = { \
.data = name ## _data, \
.len = sizeof ( name ## _data ), \
.expected_digest = DIGEST, \
.expected_digestsize = DIGESTSIZE, \
.expected_range = RANGE, \
.expected_trim = TRIM, \
.expected_segments = SEGMENTS, \
}
#define DATA(...)
Define inline data.
Definition acpi_test.c:74
unsigned char uint8_t
Definition stdint.h:10
const char * name
Definition ath9k_hw.c:1986
#define DIGEST(...)
Define inline expected digest.
Definition der_test.c:45
#define TRIM(START, END)
Define an inline trimmed content range.
Definition pccrc_test.c:63
#define RANGE(START, END)
Define an inline content range.
Definition pccrc_test.c:54
A content information test.
Definition pccrc_test.c:66

Define a content information test.

Parameters
nameTest name
DATARaw content information
DIGESTExpected digest algorithm
DIGESTSIZEExpected digest size
RANGEExpected content range
TRIMExpected trimmer content range
SEGMENTSExpected number of segments
Return values
testContent information test

Raw content information can be obtained from PeerDist-capable web servers using wget's "--header" option to inject the relevant PeerDist headers. For example:

wget –header "Accept-Encoding: peerdist" \ –header "X-P2P-PeerDist: Version=1.0" \ http://peerdist.server.address/test.url -O - | xxd -i -c 11

Version 1 content information can be retrieved using the headers:

Accept-Encoding: peerdist X-P2P-PeerDist: Version=1.0

Version 2 content information can be retrieved (from compatible servers) using the headers:

Accept-Encoding: peerdist X-P2P-PeerDist: Version=1.1 X-P2P-PeerDistEx: MinContentInformation=2.0, MaxContentInformation=2.0

Definition at line 115 of file pccrc_test.c.

◆ PEERDIST_INFO_SEGMENT_TEST

#define PEERDIST_INFO_SEGMENT_TEST ( name,
INDEX,
RANGE,
BLOCKS,
BLKSIZE,
HASH,
SECRET,
ID )
Value:
static struct peerdist_info_segment_test name = { \
.index = INDEX, \
.expected_range = RANGE, \
.expected_blocks = BLOCKS, \
.expected_blksize = BLKSIZE, \
.expected_hash = HASH, \
.expected_secret = SECRET, \
.expected_id = ID, \
}
A content information segment test.
Definition pccrc_test.c:129

Define a content information segment test.

Parameters
nameTest name
INDEXSegment index
RANGEExpected content range
BLOCKSExpected number of blocks
BLKSIZEExpected block size
HASHExpected segment hash of data
SECRETExpected segment secret
IDExpected segment identifier
Return values
testContent information segment test

Definition at line 159 of file pccrc_test.c.

◆ PEERDIST_INFO_BLOCK_TEST

#define PEERDIST_INFO_BLOCK_TEST ( name,
INDEX,
RANGE,
TRIM,
HASH )
Value:
static struct peerdist_info_block_test name = { \
.index = INDEX, \
.expected_range = RANGE, \
.expected_trim = TRIM, \
.expected_hash = HASH, \
}
A content information block test.
Definition pccrc_test.c:172

Define a content information block test.

Parameters
nameTest name
INDEXBlock index
RANGEExpected content range
TRIMExpected trimmed content range
HASHExpected hash of data
Return values
testContent information block test

Definition at line 193 of file pccrc_test.c.

193#define PEERDIST_INFO_BLOCK_TEST( name, INDEX, RANGE, TRIM, HASH ) \
194 static struct peerdist_info_block_test name = { \
195 .index = INDEX, \
196 .expected_range = RANGE, \
197 .expected_trim = TRIM, \
198 .expected_hash = HASH, \
199 }

◆ SERVER_PASSPHRASE

#define SERVER_PASSPHRASE ( name,
DATA )
Value:
static uint8_t name[] = DATA

Define a server passphrase.

Parameters
nameServer passphrase name
DATARaw server passphrase

The server passphrase can be exported from a Windows BranchCache server using the command:

netsh branchcache exportkey exported.key somepassword

and this encrypted exported key can be decrypted using the oSSL_key_dx or mcrypt_key_dx utilities found in the (prototype) Prequel project at https://fedorahosted.org/prequel/ :

oSSL_key_dx exported.key somepassword or mcrypt_key_dx exported.key somepassword

Either command will display both the server passphrase and the "Server Secret". Note that this latter is the version 1 server secret (i.e. the SHA-256 of the server passphrase); the corresponding version 2 server secret can be obtained by calculating the truncated SHA-512 of the server passphrase.

We do not know the server passphrase during normal operation. We use it in the self-tests only to check for typos and other errors in the test vectors, by checking that the segment secret defined in a content information segment test is as expected.

Definition at line 231 of file pccrc_test.c.

231#define SERVER_PASSPHRASE( name, DATA ) \
232 static uint8_t name[] = DATA

◆ peerdist_info_ok

#define peerdist_info_ok ( test,
info )
Value:
peerdist_info_okx ( test, info, __FILE__, __LINE__ )
u32 info
Definition ar9003_mac.h:0
static int test
Definition epic100.c:73
static void peerdist_info_okx(struct peerdist_info_test *test, struct peerdist_info *info, const char *file, unsigned int line)
Report content information test result.
Definition pccrc_test.c:359

Definition at line 379 of file pccrc_test.c.

379#define peerdist_info_ok( test, info ) \
380 peerdist_info_okx ( test, info, __FILE__, __LINE__ )

Referenced by peerdist_info_test_exec().

◆ peerdist_info_segment_ok

#define peerdist_info_segment_ok ( test,
info,
segment )
Value:
peerdist_info_segment_okx ( test, info, segment, __FILE__, __LINE__ )
uint16_t segment
Code segment.
Definition librm.h:3
static void peerdist_info_segment_okx(struct peerdist_info_segment_test *test, const struct peerdist_info *info, struct peerdist_info_segment *segment, const char *file, unsigned int line)
Report content information segment test result.
Definition pccrc_test.c:391

Definition at line 415 of file pccrc_test.c.

415#define peerdist_info_segment_ok( test, info, segment ) \
416 peerdist_info_segment_okx ( test, info, segment, __FILE__, __LINE__ )

Referenced by peerdist_info_test_exec().

◆ peerdist_info_block_ok

#define peerdist_info_block_ok ( test,
segment,
block )
Value:
peerdist_info_block_okx ( test, segment, block, __FILE__, __LINE__ )
uint8_t block[3][8]
DES-encrypted blocks.
Definition mschapv2.h:1
static void peerdist_info_block_okx(struct peerdist_info_block_test *test, const struct peerdist_info_segment *segment, struct peerdist_info_block *block, const char *file, unsigned int line)
Report content information block test result.
Definition pccrc_test.c:428

Definition at line 449 of file pccrc_test.c.

449#define peerdist_info_block_ok( test, segment, block ) \
450 peerdist_info_block_okx ( test, segment, block, __FILE__, __LINE__ )

Referenced by peerdist_info_test_exec().

◆ peerdist_info_passphrase_ok

#define peerdist_info_passphrase_ok ( test,
info,
pass,
pass_len )
Value:
peerdist_info_passphrase_okx ( test, info, pass, pass_len, \
__FILE__, __LINE__ )
static void peerdist_info_passphrase_okx(struct peerdist_info_segment_test *test, const struct peerdist_info *info, uint8_t *pass, size_t pass_len, const char *file, unsigned int line)
Report server passphrase test result.
Definition pccrc_test.c:463

Definition at line 487 of file pccrc_test.c.

487#define peerdist_info_passphrase_ok( test, info, pass, pass_len ) \
488 peerdist_info_passphrase_okx ( test, info, pass, pass_len, \
489 __FILE__, __LINE__ )

Referenced by peerdist_info_test_exec().

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ SERVER_PASSPHRASE()

SERVER_PASSPHRASE ( passphrase ,
DATA(0x2a, 0x3d, 0x73, 0xeb, 0x43, 0x5e, 0x9f, 0x2b, 0x8a, 0x34, 0x42, 0x67, 0xe7, 0x46, 0x7a, 0x3c, 0x73, 0x85, 0xc6, 0xe0, 0x55, 0xe2, 0xb4, 0xd3, 0x0d, 0xfe, 0xc7, 0xc3, 0x8b, 0x0e, 0xd7, 0x2c)  )

Server passphrase used for these test vectors.

References DATA.

◆ PEERDIST_INFO_TEST() [1/2]

PEERDIST_INFO_TEST ( iis_85_png_v1 ,
DATA(0x00, 0x01, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x85, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xd8, 0xd9, 0x76, 0x35, 0x4a, 0x48, 0x72, 0xe9, 0x25, 0x76, 0x18, 0x03, 0xf4, 0x58, 0xd9, 0xda, 0xaa, 0x67, 0xf8, 0xe3, 0x1c, 0x63, 0x0f, 0xb7, 0x4e, 0x6a, 0x31, 0x2e, 0xf8, 0xa2, 0x5a, 0xba, 0x11, 0xaf, 0xc0, 0xd7, 0x94, 0x92, 0x43, 0xf9, 0x4f, 0x9c, 0x1f, 0xab, 0x35, 0xd9, 0xfd, 0x1e, 0x33, 0x1f, 0xcf, 0x78, 0x11, 0xa2, 0xe0, 0x1d, 0x35, 0x87, 0xb3, 0x8d, 0x77, 0x0a, 0x29, 0xe2, 0x02, 0x00, 0x00, 0x00, 0x73, 0xc1, 0x8a, 0xb8, 0x54, 0x91, 0x10, 0xf8, 0xe9, 0x0e, 0x71, 0xbb, 0xc3, 0xab, 0x2a, 0xa8, 0xc4, 0x4d, 0x13, 0xf4, 0x92, 0x94, 0x99, 0x25, 0x5b, 0x66, 0x0f, 0x24, 0xec, 0x77, 0x80, 0x0b, 0x97, 0x4b, 0xdd, 0x65, 0x56, 0x7f, 0xde, 0xec, 0xcd, 0xaf, 0xe4, 0x57, 0xa9, 0x50, 0x3b, 0x45, 0x48, 0xf6, 0x6e, 0xd3, 0xb1, 0x88, 0xdc, 0xfd, 0xa0, 0xac, 0x38, 0x2b, 0x09, 0x71, 0x1a, 0xcc) ,
& sha256_algorithm,
32 ,
RANGE(0, 99710) ,
TRIM(0, 99710) ,
1  )

IIS logo (iis-85.png) content information version 1.

References DATA, RANGE, sha256_algorithm, and TRIM.

◆ PEERDIST_INFO_SEGMENT_TEST() [1/3]

PEERDIST_INFO_SEGMENT_TEST ( iis_85_png_v1_s0 ,
0 ,
RANGE(0, 99710) ,
2 ,
65536 ,
DATA(0xd8, 0xd9, 0x76, 0x35, 0x4a, 0x48, 0x72, 0xe9, 0x25, 0x76, 0x18, 0x03, 0xf4, 0x58, 0xd9, 0xda, 0xaa, 0x67, 0xf8, 0xe3, 0x1c, 0x63, 0x0f, 0xb7, 0x4e, 0x6a, 0x31, 0x2e, 0xf8, 0xa2, 0x5a, 0xba) ,
DATA(0x11, 0xaf, 0xc0, 0xd7, 0x94, 0x92, 0x43, 0xf9, 0x4f, 0x9c, 0x1f, 0xab, 0x35, 0xd9, 0xfd, 0x1e, 0x33, 0x1f, 0xcf, 0x78, 0x11, 0xa2, 0xe0, 0x1d, 0x35, 0x87, 0xb3, 0x8d, 0x77, 0x0a, 0x29, 0xe2) ,
DATA(0x49, 0x1b, 0x21, 0x7d, 0xbe, 0xe2, 0xb5, 0xf1, 0x2c, 0xa7, 0x9b, 0x01, 0x5e, 0x06, 0xf4, 0xbb, 0xe6, 0x4f, 0x97, 0x45, 0xba, 0xd7, 0x86, 0x7a, 0xef, 0x17, 0xde, 0x59, 0x92, 0x7e, 0xdc, 0xe9)  )

IIS logo (iis-85.png) content information version 1 segment 0.

References DATA, and RANGE.

◆ PEERDIST_INFO_BLOCK_TEST() [1/4]

PEERDIST_INFO_BLOCK_TEST ( iis_85_png_v1_s0_b0 ,
0 ,
RANGE(0, 65536) ,
TRIM(0, 65536) ,
DATA(0x73, 0xc1, 0x8a, 0xb8, 0x54, 0x91, 0x10, 0xf8, 0xe9, 0x0e, 0x71, 0xbb, 0xc3, 0xab, 0x2a, 0xa8, 0xc4, 0x4d, 0x13, 0xf4, 0x92, 0x94, 0x99, 0x25, 0x5b, 0x66, 0x0f, 0x24, 0xec, 0x77, 0x80, 0x0b)  )

IIS logo (iis-85.png) content information version 1 segment 0 block 0.

References DATA, RANGE, and TRIM.

◆ PEERDIST_INFO_BLOCK_TEST() [2/4]

PEERDIST_INFO_BLOCK_TEST ( iis_85_png_v1_s0_b1 ,
1 ,
RANGE(65536, 99710) ,
TRIM(65536, 99710) ,
DATA(0x97, 0x4b, 0xdd, 0x65, 0x56, 0x7f, 0xde, 0xec, 0xcd, 0xaf, 0xe4, 0x57, 0xa9, 0x50, 0x3b, 0x45, 0x48, 0xf6, 0x6e, 0xd3, 0xb1, 0x88, 0xdc, 0xfd, 0xa0, 0xac, 0x38, 0x2b, 0x09, 0x71, 0x1a, 0xcc)  )

IIS logo (iis-85.png) content information version 1 segment 0 block 1.

References DATA, RANGE, and TRIM.

◆ PEERDIST_INFO_TEST() [2/2]

PEERDIST_INFO_TEST ( iis_85_png_v2 ,
DATA(0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x99, 0xde, 0xe0, 0xd0, 0xc3, 0x58, 0xe2, 0x68, 0x4b, 0x62, 0x33, 0x0d, 0x32, 0xb5, 0xf1, 0x97, 0x87, 0x24, 0xa0, 0xd0, 0xa5, 0x2b, 0xdc, 0x5e, 0x78, 0x1f, 0xae, 0x71, 0xff, 0x57, 0xa8, 0xbe, 0x3d, 0xd4, 0x58, 0x03, 0x7e, 0xd4, 0x04, 0x11, 0x6b, 0xb6, 0x16, 0xd9, 0xb1, 0x41, 0x16, 0x08, 0x85, 0x20, 0xc4, 0x7c, 0xdc, 0x50, 0xab, 0xce, 0xa3, 0xfa, 0xe1, 0x88, 0xa9, 0x8e, 0xa2, 0x2d, 0xf3, 0xc0, 0x00, 0x00, 0xeb, 0xa0, 0x33, 0x81, 0xd0, 0xd0, 0xcb, 0x74, 0xf4, 0xb6, 0x13, 0xd8, 0x21, 0x0f, 0x37, 0xf0, 0x02, 0xa0, 0x6f, 0x39, 0x10, 0x58, 0x60, 0x96, 0xa1, 0x30, 0xd3, 0x43, 0x98, 0xc0, 0x8e, 0x66, 0xd7, 0xbc, 0xb8, 0xb6, 0xeb, 0x77, 0x83, 0xe4, 0xf8, 0x07, 0x64, 0x7b, 0x63, 0xf1, 0x46, 0xb5, 0x2f, 0x4a, 0xc8, 0x9c, 0xcc, 0x7a, 0xbf, 0x5f, 0xa1, 0x1a, 0xca, 0xfc, 0x2a, 0xcf, 0x50, 0x28, 0x58, 0x6c) ,
& sha512_algorithm,
32 ,
RANGE(0, 99710) ,
TRIM(0, 99710) ,
2  )

IIS logo (iis-85.png) content information version 2.

References DATA, RANGE, sha512_algorithm, and TRIM.

◆ PEERDIST_INFO_SEGMENT_TEST() [2/3]

PEERDIST_INFO_SEGMENT_TEST ( iis_85_png_v2_s0 ,
0 ,
RANGE(0, 39390) ,
1 ,
39390 ,
DATA(0xe0, 0xd0, 0xc3, 0x58, 0xe2, 0x68, 0x4b, 0x62, 0x33, 0x0d, 0x32, 0xb5, 0xf1, 0x97, 0x87, 0x24, 0xa0, 0xd0, 0xa5, 0x2b, 0xdc, 0x5e, 0x78, 0x1f, 0xae, 0x71, 0xff, 0x57, 0xa8, 0xbe, 0x3d, 0xd4) ,
DATA(0x58, 0x03, 0x7e, 0xd4, 0x04, 0x11, 0x6b, 0xb6, 0x16, 0xd9, 0xb1, 0x41, 0x16, 0x08, 0x85, 0x20, 0xc4, 0x7c, 0xdc, 0x50, 0xab, 0xce, 0xa3, 0xfa, 0xe1, 0x88, 0xa9, 0x8e, 0xa2, 0x2d, 0xf3, 0xc0) ,
DATA(0x33, 0x71, 0xbb, 0xea, 0xdd, 0xb6, 0x23, 0x53, 0xad, 0xce, 0xf9, 0x70, 0xa0, 0x6f, 0xdf, 0x65, 0x00, 0x1e, 0x04, 0x21, 0xf4, 0xc7, 0x10, 0x82, 0x76, 0xb0, 0xc3, 0x7a, 0x9f, 0x9e, 0xc1, 0x0f)  )

IIS logo (iis-85.png) content information version 2 segment 0.

References DATA, and RANGE.

◆ PEERDIST_INFO_BLOCK_TEST() [3/4]

PEERDIST_INFO_BLOCK_TEST ( iis_85_png_v2_s0_b0 ,
0 ,
RANGE(0, 39390) ,
TRIM(0, 39390) ,
DATA(0xe0, 0xd0, 0xc3, 0x58, 0xe2, 0x68, 0x4b, 0x62, 0x33, 0x0d, 0x32, 0xb5, 0xf1, 0x97, 0x87, 0x24, 0xa0, 0xd0, 0xa5, 0x2b, 0xdc, 0x5e, 0x78, 0x1f, 0xae, 0x71, 0xff, 0x57, 0xa8, 0xbe, 0x3d, 0xd4)  )

IIS logo (iis-85.png) content information version 2 segment 0 block 0.

References DATA, RANGE, and TRIM.

◆ PEERDIST_INFO_SEGMENT_TEST() [3/3]

PEERDIST_INFO_SEGMENT_TEST ( iis_85_png_v2_s1 ,
1 ,
RANGE(39390, 99710) ,
1 ,
60320 ,
DATA(0x33, 0x81, 0xd0, 0xd0, 0xcb, 0x74, 0xf4, 0xb6, 0x13, 0xd8, 0x21, 0x0f, 0x37, 0xf0, 0x02, 0xa0, 0x6f, 0x39, 0x10, 0x58, 0x60, 0x96, 0xa1, 0x30, 0xd3, 0x43, 0x98, 0xc0, 0x8e, 0x66, 0xd7, 0xbc) ,
DATA(0xb8, 0xb6, 0xeb, 0x77, 0x83, 0xe4, 0xf8, 0x07, 0x64, 0x7b, 0x63, 0xf1, 0x46, 0xb5, 0x2f, 0x4a, 0xc8, 0x9c, 0xcc, 0x7a, 0xbf, 0x5f, 0xa1, 0x1a, 0xca, 0xfc, 0x2a, 0xcf, 0x50, 0x28, 0x58, 0x6c) ,
DATA(0xd7, 0xe9, 0x24, 0x42, 0x5e, 0x8f, 0x4f, 0x88, 0xf0, 0x1d, 0xc6, 0xa9, 0xbb, 0x1b, 0xc3, 0x7b, 0xe1, 0x13, 0xec, 0x79, 0x17, 0xc7, 0x45, 0xd4, 0x96, 0x5c, 0x2b, 0x55, 0xfa, 0x16, 0x3a, 0x6e)  )

IIS logo (iis-85.png) content information version 2 segment 1.

References DATA, and RANGE.

◆ PEERDIST_INFO_BLOCK_TEST() [4/4]

PEERDIST_INFO_BLOCK_TEST ( iis_85_png_v2_s1_b0 ,
0 ,
RANGE(39390, 99710) ,
TRIM(39390, 99710) ,
DATA(0x33, 0x81, 0xd0, 0xd0, 0xcb, 0x74, 0xf4, 0xb6, 0x13, 0xd8, 0x21, 0x0f, 0x37, 0xf0, 0x02, 0xa0, 0x6f, 0x39, 0x10, 0x58, 0x60, 0x96, 0xa1, 0x30, 0xd3, 0x43, 0x98, 0xc0, 0x8e, 0x66, 0xd7, 0xbc)  )

IIS logo (iis-85.png) content information version 2 segment 1 block 0.

References DATA, RANGE, and TRIM.

◆ peerdist_info_okx()

void peerdist_info_okx ( struct peerdist_info_test * test,
struct peerdist_info * info,
const char * file,
unsigned int line )
static

Report content information test result.

Parameters
testContent information test
infoContent information to fill in
fileTest code file
lineTest code line

Definition at line 359 of file pccrc_test.c.

361 {
362
363 /* Parse content information */
364 okx ( peerdist_info ( test->data, test->len, info ) == 0, file, line );
365
366 /* Verify content information */
367 okx ( info->raw.data == test->data, file, line );
368 okx ( info->raw.len == test->len, file, line );
369 okx ( info->digest == test->expected_digest, file, line );
370 okx ( info->digestsize == test->expected_digestsize, file, line );
371 okx ( info->range.start == test->expected_range.start, file, line );
372 okx ( info->range.end == test->expected_range.end, file, line );
373 okx ( info->trim.start == test->expected_trim.start, file, line );
374 okx ( info->trim.end == test->expected_trim.end, file, line );
375 okx ( info->trim.start >= info->range.start, file, line );
376 okx ( info->trim.end <= info->range.end, file, line );
377 okx ( info->segments == test->expected_segments, file, line );
378}
Content information.
Definition pccrc.h:317
#define okx(success, file, line)
Report test result.
Definition test.h:44

References info, okx, and test.

◆ peerdist_info_segment_okx()

void peerdist_info_segment_okx ( struct peerdist_info_segment_test * test,
const struct peerdist_info * info,
struct peerdist_info_segment * segment,
const char * file,
unsigned int line )
static

Report content information segment test result.

Parameters
testContent information segment test
infoContent information
segmentSegment information to fill in
fileTest code file
lineTest code line

Definition at line 391 of file pccrc_test.c.

394 {
395 size_t digestsize = info->digestsize;
396
397 /* Parse content information segment */
398 okx ( peerdist_info_segment ( info, segment, test->index ) == 0,
399 file, line );
400
401 /* Verify content information segment */
402 okx ( segment->info == info, file, line );
403 okx ( segment->index == test->index, file, line );
404 okx ( segment->range.start == test->expected_range.start, file, line );
405 okx ( segment->range.end == test->expected_range.end, file, line );
406 okx ( segment->blocks == test->expected_blocks, file, line );
407 okx ( segment->blksize == test->expected_blksize, file, line );
408 okx ( memcmp ( segment->hash, test->expected_hash,
409 digestsize ) == 0, file, line );
410 okx ( memcmp ( segment->secret, test->expected_secret,
411 digestsize ) == 0, file, line );
412 okx ( memcmp ( segment->id, test->expected_id,
413 digestsize ) == 0, file, line );
414}
uint32_t digestsize
Digest size (i.e.
Definition pccrr.h:1
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition string.c:115
A content information segment.
Definition pccrc.h:347

References digestsize, info, memcmp(), okx, segment, and test.

◆ peerdist_info_block_okx()

void peerdist_info_block_okx ( struct peerdist_info_block_test * test,
const struct peerdist_info_segment * segment,
struct peerdist_info_block * block,
const char * file,
unsigned int line )
static

Report content information block test result.

Parameters
testContent information block test
segmentSegment information
blockBlock information to fill in
fileTest code file
lineTest code line

Definition at line 428 of file pccrc_test.c.

431 {
432 const struct peerdist_info *info = segment->info;
433 size_t digestsize = info->digestsize;
434
435 /* Parse content information block */
436 okx ( peerdist_info_block ( segment, block, test->index ) == 0,
437 file, line );
438
439 /* Verify content information block */
440 okx ( block->segment == segment, file, line );
441 okx ( block->index == test->index, file, line );
442 okx ( block->range.start == test->expected_range.start, file, line );
443 okx ( block->range.end == test->expected_range.end, file, line );
444 okx ( block->trim.start == test->expected_trim.start, file, line );
445 okx ( block->trim.end == test->expected_trim.end, file, line );
446 okx ( memcmp ( block->hash, test->expected_hash,
447 digestsize ) == 0, file, line );
448}
A content information block.
Definition pccrc.h:394

References block, digestsize, info, memcmp(), okx, segment, and test.

◆ peerdist_info_passphrase_okx()

void peerdist_info_passphrase_okx ( struct peerdist_info_segment_test * test,
const struct peerdist_info * info,
uint8_t * pass,
size_t pass_len,
const char * file,
unsigned int line )
static

Report server passphrase test result.

Parameters
testContent information segment test
infoContent information
passServer passphrase
pass_lenLength of server passphrase
fileTest code file
lineTest code line

Definition at line 463 of file pccrc_test.c.

466 {
467 struct digest_algorithm *digest = info->digest;
468 uint8_t ctx[ hmac_ctxsize ( digest ) ];
469 uint8_t secret[digest->digestsize];
470 uint8_t expected[digest->digestsize];
471 size_t digestsize = info->digestsize;
472
473 /* Calculate server secret */
474 digest_init ( digest, ctx );
475 digest_update ( digest, ctx, pass, pass_len );
476 digest_final ( digest, ctx, secret );
477
478 /* Calculate expected segment secret */
479 hmac_init ( digest, ctx, secret, digestsize );
480 hmac_update ( digest, ctx, test->expected_hash, digestsize );
481 hmac_final ( digest, ctx, expected );
482
483 /* Verify segment secret */
484 okx ( memcmp ( test->expected_secret, expected, digestsize ) == 0,
485 file, line );
486}
struct golan_eq_context ctx
Definition CIB_PRM.h:0
void hmac_init(struct digest_algorithm *digest, void *ctx, const void *key, size_t key_len)
Initialise HMAC.
Definition hmac.c:58
void hmac_final(struct digest_algorithm *digest, void *ctx, void *hmac)
Finalise HMAC.
Definition hmac.c:88
static void hmac_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Update HMAC.
Definition hmac.h:43
static size_t hmac_ctxsize(struct digest_algorithm *digest)
Calculate HMAC context size.
Definition hmac.h:29
static void digest_init(struct digest_algorithm *digest, void *ctx)
Definition crypto.h:219
static void digest_final(struct digest_algorithm *digest, void *ctx, void *out)
Definition crypto.h:230
static void digest_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Definition crypto.h:224
A message digest algorithm.
Definition crypto.h:19
size_t digestsize
Digest size.
Definition crypto.h:27

References ctx, digest_final(), digest_init(), digest_update(), digest_algorithm::digestsize, digestsize, hmac_ctxsize(), hmac_final(), hmac_init(), hmac_update(), info, memcmp(), okx, and test.

◆ peerdist_info_test_exec()

void peerdist_info_test_exec ( void )
static

Perform content information self-tests.

Definition at line 495 of file pccrc_test.c.

495 {
496 struct peerdist_info info;
499
500 /* IIS logo (iis-85.png) content information version 1 */
501 peerdist_info_ok ( &iis_85_png_v1, &info );
502 peerdist_info_passphrase_ok ( &iis_85_png_v1_s0, &info,
503 passphrase, sizeof ( passphrase ) );
504 peerdist_info_segment_ok ( &iis_85_png_v1_s0, &info, &segment );
505 peerdist_info_block_ok ( &iis_85_png_v1_s0_b0, &segment, &block );
506 peerdist_info_block_ok ( &iis_85_png_v1_s0_b1, &segment, &block );
507
508 /* IIS logo (iis-85.png) content information version 2 */
509 peerdist_info_ok ( &iis_85_png_v2, &info );
510 peerdist_info_passphrase_ok ( &iis_85_png_v2_s0, &info,
511 passphrase, sizeof ( passphrase ) );
512 peerdist_info_segment_ok ( &iis_85_png_v2_s0, &info, &segment );
513 peerdist_info_block_ok ( &iis_85_png_v2_s0_b0, &segment, &block );
514 peerdist_info_passphrase_ok ( &iis_85_png_v2_s1, &info,
515 passphrase, sizeof ( passphrase ) );
516 peerdist_info_segment_ok ( &iis_85_png_v2_s1, &info, &segment );
517 peerdist_info_block_ok ( &iis_85_png_v2_s1_b0, &segment, &block );
518}
#define peerdist_info_ok(test, info)
Definition pccrc_test.c:379
#define peerdist_info_passphrase_ok(test, info, pass, pass_len)
Definition pccrc_test.c:487
#define peerdist_info_block_ok(test, segment, block)
Definition pccrc_test.c:449
#define peerdist_info_segment_ok(test, info, segment)
Definition pccrc_test.c:415

References block, info, peerdist_info_block_ok, peerdist_info_ok, peerdist_info_passphrase_ok, peerdist_info_segment_ok, and segment.

Variable Documentation

◆ __self_test

struct self_test peerdist_info_test __self_test
Initial value:
= {
.name = "pccrc",
}
static void peerdist_info_test_exec(void)
Perform content information self-tests.
Definition pccrc_test.c:495

Content information self-test.

Definition at line 521 of file pccrc_test.c.

521 {
522 .name = "pccrc",
524};