-
Notifications
You must be signed in to change notification settings - Fork 18
Add IPsec ESP transport support, packet print debug functions, and misc cleanup. #4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
bffa3c2 to
2746fc1
Compare
2746fc1 to
3d47370
Compare
562fc2e to
5b92271
Compare
5eb24a1 to
c2c3854
Compare
| printf(esp_str_4hex " (%s, %d bytes)\n", | ||
| val[0], val[1], val[2], val[3], fld, val_len); | ||
| if (val_len > 4) { | ||
| for (size_t i = 4; i < val_len; i += 4) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can val_len be a non-multiple of 4? because if so this part of code can result in a buffer over-read in a last iteration.
e.g.: val_len is not a multiple of 4, and is >= 5 and <= 16 the loop could go over I think, and read up to 3 bytes past val_len on the last iteration of the loop.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think all these fields must be 4 byte multiples, but I'll double check
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After looking more I think this should be ok. esp_print_field() is only used with SPI (4 byte), SEQ (4 byte), IV (8 or 16 byte), ICV (12 or 16 byte), and the payload.
The payload can be any length, but will be at least 8 bytes (UDP header), and logs a skip and breaks if (i + 4) > val_len.
This is what it looks like with UDP + rfc4543 (gmac only) sending "00" across UDP
udp hdr:
+-------------------+
| 8 | 12345 | (src_port, dst_port)
+-------------------+
| 11 | 0x6d50 | (len, chksum)
+-------------------+
| 00. | (payload first 16 bytes)
+-------------------+
...
esp packet: (48 bytes)
+------------------+
| 08 08 08 08 | (spi, 4 bytes)
+------------------+
| 00 00 00 28 | (seq, 4 bytes)
+------------------+
| 98 fe d8 93 | (iv, 8 bytes)
| d1 61 ee 57 |
+------------------+
| 00 08 30 39 | (payload, 11 bytes)
| 00 0b 6d 50 |
| .. .. .. .. |
+------------------+
| 0203 | 03 | 0x11 | (padding last 2 bytes, pad len, nxt hdr)
+------------------+
and same for "000"
udp hdr:
+-------------------+
| 8 | 12345 | (src_port, dst_port)
+-------------------+
| 12 | 0x4744 | (len, chksum)
+-------------------+
| 000. | (payload first 16 bytes)
+-------------------+
...
esp packet: (48 bytes)
+------------------+
...
+------------------+
| 00 08 30 39 | (payload, 12 bytes)
| 00 0c 47 44 |
| 30 30 30 0a |
+------------------+
| 0102 | 02 | 0x11 | (padding last 2 bytes, pad len, nxt hdr)
+------------------+
"0000"
+------------------+
| 00 08 30 39 | (payload, 13 bytes)
| 00 0d 3d 1c |
| 30 30 30 30 |
| .. .. .. .. |
+------------------+
"00000"
+------------------+
| 00 08 30 39 | (payload, 14 bytes)
| 00 0e 17 10 |
| 30 30 30 30 |
| .. .. .. .. |
+------------------+
etc
| case ESP_ENC_CBC_AES: | ||
| block_len = AES_BLOCK_SIZE; | ||
| break; | ||
| #ifndef NO_DES3 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't see any definition of a wolfIP_esp_sa_new_des3, is this expected if the user decides to use DES3? Since the enum exists.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was lazy and hadn't added des3 support yet! Doing it now.
src/test/esp/esp_common.c
Outdated
| @@ -0,0 +1,48 @@ | |||
| /* esp_common.c | |||
| * | |||
| * Copyright (C) 2024 wolfSSL Inc. | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit:2026?
Description
esp_sa.txtconfig totools/ip-xfrm/.DHCP_OPT_data_to_u32(),DHCP_OPT_u32_to_data()to trim duplicated code.error: initializer-string for array), etc.Testing
See
tools/ip-xfrm/README.md:packet print functions
Added packet print functions
wolfIP_print_X()foreth,ip,udp,esp: