Friday, February 3, 2023

Which one to use - SHA256sum vs md5sum

  • Both algorithms SHA256sum and md5sum generate a hash. 
  • md5sum generates 128bit hash vs 256 bit hash for sha256sum. In theory, that can reduce hash collisions i.e. two different files/entities being hashed generating the same hash value.
  • Which algorithm to use depends on the use case i.e. the entity/ file being hashed. We want to pick something that does not result in a hash collision.
  • For most cases, 132bit hash sum is more than good enough for supporting a large number of unique items with very low probability of collision [2]. e.g. with a 160bit hash with 2* 10^20 unique entities, the odds of collision are 1 in 100million which is great for most purposes.
  • Considering the limited number of unique objects of a particular type being compared, for most cases a 32bit hash sum suffices.
label: programming, utilities, linux, artifact comparison, SHA256sum vs md5sum, CRC32

[1] md5sum vs sha256sum - Good discussion, but I do not agree with the hash collision discussion here.
[2] Hash collision probabilities  - Nice algorithm for computing probability of hash collision.

Thursday, February 2, 2023

Comparison between unix sockets and TCP/IP sockets

Netlink sockets are the way entities communicate to each other.
  • Address: Unix domain sockets do not need a IP address + port number, TCP/IP sockets do. 
  • Reach: Unix sockets are local to that machine, while TCP/IP sockets need not be.
  • Speed: Unix sockets are faster since they do not go through the TCP/IP stack which ends up being faster.
  • Types: TCP/IP sockets are of the type streaming, datagram, or Raw. There are no further types of Unix sockets.
  • Application: Unix sockets are used for inter process communication on the same system. They behave like system pipes. TCP/IP sockets have a wide range of applications e.g. Telnet.
  • Scope control: Unix domain sockets can be chmod protected while TCP/IP sockets have global scope. [2]
label: TLDR, Sockets, application, comparison, Unix, Networking, pipes, differences


Wednesday, February 1, 2023

SWD vs JTAG and the use of semihosting

  • JTAG (Joint test access group interface) [4] and SWD (Serial wire debug) [5] are interfaces used to connect to a remote embedded processor for debugging and tracking execution. 
    • SWD is a 2 wire interface which is ARM specific, while JTAG is used more widely in the industry. 
    • JTAG supports boundary scan [5] a mechanism used to inspect IC pin states and measure voltages.
  • Semihosting [1] is a way by which a target device connected via a JTAG or SWD interface can use a remote hosts (e.g. a laptops) keyboard and console. This is enabled via a C library compiled with the target's code that allows the injection of breakpoints when these inputs or outputs are required and allows communication with the remote host via a debugger interface (JTAG/SWD) [2].
  • Debugging or printing is usually slow with the JTAG interface because the clock speed is slow on those lines [3].
labels: embedded development, semihosting, SWD, JTAG interface, debugging, TLDR, Summary

[1] Semihosting - The ARM guide
[2] Semihosting ARM interface