def test_unprotect(self): plaintext = ux('800f1234decafbadcafebabe' + 'ab'*16) ciphertext = ux('800f1234decafbadcafebabe' + 'f1d9de17ff251ff1aa007774' + 'b0b4b40da08d9d9a5b3a55d8873b') data = self.ctx.srtp_unprotect(ciphertext) self.assertEqual(data, plaintext)
def test_protect(self): plaintext = ux('800f1234decafbadcafebabe' + 'ab'*16) ciphertext = ux('800f1234decafbadcafebabe4e55dc4ce79978d88ca4d215949d2402b78d6acc99ea179b8dbb') assert(len(ciphertext) == len(plaintext) + 10) data = self.ctx.srtp_protect(plaintext) assert(len(data) == len(plaintext) + 10) assert(data == ciphertext)
stack_avp = deepcopy(self) stack_avp.length = None stack_avp.avps.append(new_avp) new_avp = stack_avp data = '' for a in self.avps: data += a.encode() data += new_avp.encode() return data if __name__ == '__main__': from binascii import unhexlify as ux UNPADDED_AVP = ux('0000012b4000000c00000000') a = Avp.decode(UNPADDED_AVP) assert(a.encode() == UNPADDED_AVP) PADDED_AVP = ux('0000010d400000334d75205365727669636520416e616c797a6572204469616d6574657220496d706c656d656e746174696f6e00') a = Avp.decode(PADDED_AVP) assert(a.encode() == PADDED_AVP) CER = ux('010000c88000010100000000000000000000000000000108400000113132372e302e302e3100000000000128400000166473742e646f6d61696e2e636f6d0000000001014000000e00017f00000100000000010a4000000c000000000000010d400000334d75205365727669636520416e616c797a6572204469616d6574657220496d706c656d656e746174696f6e000000012b4000000c000000000000010c4000000c000007d100000104400000200000010a4000000c000028af000001024000000c01000000') m = Msg.decode(CER) assert(m.encode() == CER) m = Msg(avps=[Avp(code=280, data='toto'), Avp(code=280, data='toto'), Avp(code=280, data='tata')]) p = m.compute_path(Avp(code=280, data='toto')) assert(p == '/code=280[0]') p = m.compute_path(Avp(code=280, data='tata'))
0x1EF, 0x1F0, 0x1F1, 0x1F2, 0x1F3, 0x1F4, 0x1F5, 0x1F6, 0x1F7, 0x1F8, 0x1F9, 0x1FA, 0x1FB, 0x1FC, 0x1FD, 0x1FE, 0x1FF} from binascii import unhexlify as ux with open("/home/sga/Documents/programs/go/goboy/tools/ref_tetris.asm", 'rb') as fd: for line in fd.readlines(): opcode = ux(line[2:4])[0] if opcode == 0xCB: opcode = 0xFF + ux(line[7:9])[0] if opcode not in opcodes: # if opcode > 0xFF: # opcode -= 0xFF print("0x{:02X}".format(opcode))
# derive hash chain from H0 # values will be used to authenticate sent messages def derive_hashchain(h0): h = h0 chain = [h0] for i in range(3): h = hashlib.sha256(h).digest() chain.append(h) return chain assert (derive_hashchain( ux('06fa3b98d71b2d4d2037886f9417377b312dd17ddd769ef7b651dcc3a661d382') ) == [ ux('06fa3b98d71b2d4d2037886f9417377b312dd17ddd769ef7b651dcc3a661d382'), ux('e54ed85bdbd82feeb3cc8e6fab43d9c23c049095a45a534d9788ce83fe92e275'), ux('6d6f62d8123e0a175d7d85f811cb2200046961da776c46feae87e2b454c96fc5'), ux('5ecde82016ea439b570ef0a854667270b7e2792419b38bbbe07e14ec51ac7e93') ]) # authenticate ZRTP message def default_authenticate(key, data): m = hmac.new(key, digestmod=hashlib.sha256) m.update(data) return m.digest()[:8]
def setUp(self): self.key = ux('f0f04914b513f2763a1b1fa130f10e2998f6f6e43e4309d1e622a0e332b9f1b6') self.salt = ux('3b04803de51ee7c96423ab5b78d2') self.ssrc = 0xcafebabe self.ctx = Context(self.key, self.salt, 10)
def setUp(self): self.key = ux('e1f97a0d3e018be0d64fa32c06de4139') self.salt = ux('0ec675ad498afeebb6960b3aabe6') self.ssrc = 0xcafebabe self.ctx = Context(self.key, self.salt, 10)
def _kdf(key, label, context, l): assert(l % 8 == 0) assert(label is not None and len(label) > 0) lbytes = l>>3 return (hmac.new(key, b'\x00\x00\x00\x01' + label + b'\x00' + context + pack('!I', l), alg).digest())[:lbytes] return _kdf if __name__ == '__main__': from binascii import unhexlify as ux def hash(name, value): m = get(name)() m.update(value) return m.hexdigest() assert(hash(b'S256', ux('bb12d0c462f29eaa31570ec83537a763678fe632a4e8758a2131e103af45d3e7')) == 'f026775816c4dc1c7dfe8d42a610a5f92ca733a1dcfe85667bf9e136921718bf') assert(hash(b'S256', ux('f026775816c4dc1c7dfe8d42a610a5f92ca733a1dcfe85667bf9e136921718bf')) == '418841a7ab2d8f314418f293ad68c3eb0b66acebdd72e161e2c78e83eb3c4f99') assert(hash(b'S384', ux('505a007544485061727432207e42be67b021243cd63c445f84a35ff6aa5d509d167d27c1875f510ca9c73a7084d7c25c6f0052276ffe3f8a641824358041f32546f9a9ddda839effdeea6a4652302bc8a0c8861dd1fc33f57c6c11fbfe213d5b1e094a3ed21b2b33db4df374541be0a60d97d171cac1b76daf894db957a23a2cc723ac3648ecf22692821b31ce4fe6483d77e10b270693214f4fba9a16a775f6640d6596f79075d75546b79afbb6e87cf3d9a91a4ed73e170a6111e02a38b5415dad83ba7a75884cf3807e0fdd76b83f05e7cdfcafdbad232dd2afafac23a4b59b12253a0542fd58fad6c8b34f0383a09257d2b591fd504aaf803755c79f95592bef4d0e4042f8d071da83cae3c887c19aeae4fcb6ffb21d167725ab6caa943480a50602fbafefc5f251248670c70b6338c8b2bf4d88919eaa29747f4d8a92e930950d5c12eb543bf5b3e4f30dac7ddb70eefc0e16b7c4b44e0c426750aa8c2d27d2c1255a430ac81143bf55ef7f614f493bd3351431b63889f0aa22f2a0f79ff34d2047a4fa7c5a433e8348bf2578089ee485770f9b9c03fb059b1496142e51b4c6d5c5318303cb4650c4222404450dd547d9e62a375207be7d76064595d2c3904e51833c0f1fa90994744b2071c6e78d5d13ab505a002148656c6c6f202020312e3130474e55205a52545020342e352e302020779ed532598e36c6667d85a4d8077fdd0d42e6e8bddac08aadd8a78cd0e3d0520500565c47bc8ee532e242660002242153333834534b4e3341455333324653334853333248533830534b3332534b36344448326b4448336b423235369a31be4095bd5a96')) == '32c761db53f3764507f5f2cfc30de73e32cc2ba8b2fb6de1ad455cf59c654f50974212d47c07bd8bf490e6e016a8de6a') KDF = get_kdf(hashlib.sha256) x = KDF(ux('6eaf9bc8ccd3e43bc53f482fe82010e2a2ad3bbc63d53cdc59a0d538f5610f35'), ux('496e69746961746f722053525450206d6173746572206b6579'), ux('53f76dadac50d1e71c26ddf1d365f040179f9ef8915c1f61021d0a09a1e22857dcd368880cc96446b67a3a364ea4280d44b793343294f425'), 256) assert(x == ux('6cb43469922a1842d947f29d7b0e769774ec31504f9e9b46618d198859bb6017'))