Skip to content

Commit 6afcc62

Browse files
author
Gleb Pomykalov
committed
Adopt AEAD tests for different linux versions
1 parent 0b5ee21 commit 6afcc62

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

test/sys/test_socket.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ pub fn test_af_alg_cipher() {
257257
pub fn test_af_alg_aead() {
258258
use libc;
259259
use nix::sys::uio::IoVec;
260-
use nix::unistd::read;
260+
use nix::unistd::{read, close};
261261
use nix::sys::socket::{socket, sendmsg, bind, accept, setsockopt,
262262
AddressFamily, SockType, SockFlag, SockAddr,
263263
ControlMessage, MsgFlags};
@@ -275,20 +275,26 @@ pub fn test_af_alg_aead() {
275275
let iv = vec![1u8; iv_len];
276276
// 256-bytes plain payload
277277
let payload_len = 256;
278-
let mut payload = vec![2u8; payload_len + (assoc_size as usize)];
278+
let mut payload = vec![2u8; payload_len + (assoc_size as usize) + auth_size];
279279

280280
for i in 0..assoc_size {
281281
payload[i as usize] = 10;
282282
}
283283

284+
let len = payload.len();
285+
286+
for i in 0..auth_size {
287+
payload[len - 1 - i] = 0;
288+
}
289+
284290
let sock = socket(AddressFamily::Alg, SockType::SeqPacket, SockFlag::empty(), None)
285291
.expect("socket failed");
286292

287293
let sockaddr = SockAddr::new_alg(alg_type, alg_name);
288294
bind(sock, &sockaddr).expect("bind failed");
289295

290-
setsockopt(sock, AlgSetKey::default(), &key).expect("setsockopt AlgSetKey");
291296
setsockopt(sock, AlgSetAeadAuthSize, &auth_size).expect("setsockopt AlgSetAeadAuthSize");
297+
setsockopt(sock, AlgSetKey::default(), &key).expect("setsockopt AlgSetKey");
292298
let session_socket = accept(sock).expect("accept failed");
293299

294300
let msgs = [
@@ -302,11 +308,18 @@ pub fn test_af_alg_aead() {
302308
let mut encrypted = vec![0u8; (assoc_size as usize) + payload_len + auth_size];
303309
let num_bytes = read(session_socket, &mut encrypted).expect("read encrypt");
304310
assert_eq!(num_bytes, payload_len + auth_size + (assoc_size as usize));
311+
close(session_socket).expect("close");
312+
313+
for i in 0..assoc_size {
314+
encrypted[i as usize] = 10;
315+
}
305316

306317
let iov = IoVec::from_slice(&encrypted);
307318

308319
let iv = vec![1u8; iv_len];
309320

321+
let session_socket = accept(sock).expect("accept failed");
322+
310323
let msgs = [
311324
ControlMessage::AlgSetOp(&libc::ALG_OP_DECRYPT),
312325
ControlMessage::AlgSetIv(iv.as_slice()),
@@ -315,11 +328,11 @@ pub fn test_af_alg_aead() {
315328
sendmsg(session_socket, &[iov], &msgs, MsgFlags::empty(), None).expect("sendmsg decrypt");
316329

317330
// allocate buffer for decrypted data
318-
let mut decrypted = vec![0u8; payload_len + (assoc_size as usize)];
331+
let mut decrypted = vec![0u8; payload_len + (assoc_size as usize) + auth_size];
319332
let num_bytes = read(session_socket, &mut decrypted).expect("read decrypt");
320333

321-
assert_eq!(num_bytes, payload_len + (assoc_size as usize));
322-
assert_eq!(decrypted, payload);
334+
assert!(num_bytes >= payload_len + (assoc_size as usize));
335+
assert_eq!(decrypted[(assoc_size as usize)..(payload_len + (assoc_size as usize))], payload[(assoc_size as usize)..payload_len + (assoc_size as usize)]);
323336
}
324337

325338
/// Tests that passing multiple fds using a single `ControlMessage` works.

0 commit comments

Comments
 (0)