merge Creative Commons™ licence deed plaintext files, by following method:
[shellsnippets/shellsnippets.git] / mksh / tpmrx
1 #!/bin/mksh
2 # $MirOS: contrib/hosted/tg/tpmrx,v 1.4 2010/02/16 13:35:45 tg Exp $
3 #-
4 # Copyright (c) 2009, 2010
5 #       Thorsten Glaser <tg@mirbsd.org>
6 #
7 # Provided that these terms and disclaimer and all copyright notices
8 # are retained or reproduced in an accompanying document, permission
9 # is granted to deal in this work without restriction, including un-
10 # limited rights to use, publicly perform, distribute, sell, modify,
11 # merge, give away, or sublicence.
12 #
13 # This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
14 # the utmost extent permitted by applicable law, neither express nor
15 # implied; without malicious intent or gross negligence. In no event
16 # may a licensor, author or contributor be held liable for indirect,
17 # direct, other damage, loss, or other issues arising in any way out
18 # of dealing in the work, even if advised of the possibility of such
19 # damage or existence of a defect, except proven that it results out
20 # of said person's immediate fault when using the work as intended.
21
22 function c_dump {
23         if [[ $dfd = - ]]; then
24                 cat >"${1:-/dev/null}"
25         elif [[ -n $1 ]]; then
26                 tee "$1" | hd >&$dfd
27         else
28                 hd >&$dfd
29         fi
30 }
31
32 function do_read {
33         print -n '\x0\xc1\x0\x0\x0\xe\x0\x0\x0\x46\x0\x0\x1\x0' >/dev/tpm
34         dd if=/dev/tpm bs=4096 count=1 2>/dev/null
35 }
36
37 function do_seed {
38         (print -n '\x0\xc1\x0\x0\x1\xd\x0\x0\x0\x47\x0\x0\x0\xff'; \
39             dd if=/dev/arandom count=1 bs=255 2>/dev/null) | \
40             dd of=/dev/tpm obs=4096 2>/dev/null
41         dd if=/dev/tpm bs=4096 count=1 2>/dev/null | c_dump
42 }
43
44 if [[ $1 = -v ]]; then
45         dfd=2
46         shift
47 else
48         dfd=-
49 fi
50
51 if [[ $1 = auto ]]; then
52         shift
53         n=0
54         while :; do
55                 if (( !n-- )); then
56                         do_seed
57                         (( n = 39 + (RANDOM & 31) ))
58                         print
59                 fi
60                 sleep $((16 + (RANDOM & 7)))
61                 do_read | c_dump /dev/wrandom
62                 print -n .
63         done
64         exit 0
65 fi
66
67 if [[ $1 = seed ]]; then
68         shift
69         do_seed
70 fi
71
72 do_read | if [[ $1 = - ]]; then
73         dd bs=1 skip=14 2>/dev/null
74 elif [[ $dfd = - ]]; then
75         dd bs=1 skip=14 of=/dev/wrandom 2>/dev/null
76         print -n .
77 else
78         c_dump /dev/wrandom
79 fi