MCPcopy Index your code
hub / github.com/python/cpython / test_aead_aes_gcm

Method test_aead_aes_gcm

Lib/test/test_socket.py:7176–7242  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

7174
7175 @support.requires_linux_version(4, 9) # see gh-73510
7176 def test_aead_aes_gcm(self):
7177 kernel_version = support._get_kernel_version("Linux")
7178 if kernel_version is not None:
7179 if kernel_version >= (6, 16) and kernel_version < (6, 18):
7180 # See https://github.com/python/cpython/issues/139310.
7181 self.skipTest("upstream Linux kernel issue")
7182
7183 key = bytes.fromhex('c939cc13397c1d37de6ae0e1cb7c423c')
7184 iv = bytes.fromhex('b3d8cc017cbb89b39e0f67e2')
7185 plain = bytes.fromhex('c3b3c41f113a31b73d9a5cd432103069')
7186 assoc = bytes.fromhex('24825602bd12a984e0092d3e448eda5f')
7187 expected_ct = bytes.fromhex('93fe7d9e9bfd10348a5606e5cafa7354')
7188 expected_tag = bytes.fromhex('0032a1dc85f1c9786925a2e71d8272dd')
7189
7190 taglen = len(expected_tag)
7191 assoclen = len(assoc)
7192
7193 with self.create_alg('aead', 'gcm(aes)') as algo:
7194 algo.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, key)
7195 algo.setsockopt(socket.SOL_ALG, socket.ALG_SET_AEAD_AUTHSIZE,
7196 None, taglen)
7197
7198 # send assoc, plain and tag buffer in separate steps
7199 op, _ = algo.accept()
7200 with op:
7201 op.sendmsg_afalg(op=socket.ALG_OP_ENCRYPT, iv=iv,
7202 assoclen=assoclen, flags=socket.MSG_MORE)
7203 op.sendall(assoc, socket.MSG_MORE)
7204 op.sendall(plain)
7205 res = op.recv(assoclen + len(plain) + taglen)
7206 self.assertEqual(expected_ct, res[assoclen:-taglen])
7207 self.assertEqual(expected_tag, res[-taglen:])
7208
7209 # now with msg
7210 op, _ = algo.accept()
7211 with op:
7212 msg = assoc + plain
7213 op.sendmsg_afalg([msg], op=socket.ALG_OP_ENCRYPT, iv=iv,
7214 assoclen=assoclen)
7215 res = op.recv(assoclen + len(plain) + taglen)
7216 self.assertEqual(expected_ct, res[assoclen:-taglen])
7217 self.assertEqual(expected_tag, res[-taglen:])
7218
7219 # create anc data manually
7220 pack_uint32 = struct.Struct('I').pack
7221 op, _ = algo.accept()
7222 with op:
7223 msg = assoc + plain
7224 op.sendmsg(
7225 [msg],
7226 ([socket.SOL_ALG, socket.ALG_SET_OP, pack_uint32(socket.ALG_OP_ENCRYPT)],
7227 [socket.SOL_ALG, socket.ALG_SET_IV, pack_uint32(len(iv)) + iv],
7228 [socket.SOL_ALG, socket.ALG_SET_AEAD_ASSOCLEN, pack_uint32(assoclen)],
7229 )
7230 )
7231 res = op.recv(len(msg) + taglen)
7232 self.assertEqual(expected_ct, res[assoclen:-taglen])
7233 self.assertEqual(expected_tag, res[-taglen:])

Callers

nothing calls this directly

Calls 8

create_algMethod · 0.95
skipTestMethod · 0.80
sendmsgMethod · 0.80
setsockoptMethod · 0.45
acceptMethod · 0.45
sendallMethod · 0.45
recvMethod · 0.45
assertEqualMethod · 0.45

Tested by

no test coverage detected