Secure MUA dev:usmt in perl

Mike Schiraldi dev@smime.pyerotechnics.com
Thu, 8 Feb 2001 15:08:09 -0500 (EST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---1462177538-1746154377-981662889=:27013
Content-Type: TEXT/PLAIN; charset=US-ASCII

Note to anyone who may one day read through the archives of this mailing
list: We used to use the secure-mua mailing list at Yahoo groups. You can
find our oldest messages there.

While trying to implement the protocol we discussed, i realized it
probably makes more sense to write this in Perl. Basically the main reason
for using C was so it could be linked, but the licenses won't allow that
anyway. 

So in about three days i was able to make more progress in Perl than i'd
been able to in weeks of C. I've attached my work.

It reads from stdin and writes to stdout, ignoring all command line
switches.

Here's an example that should illustrate its use. As usual, > is what you
feed it on stdin, | is what it spits out. Field names are case-insensitive
but case-preserving, no field name can appear more than once, and their
order doesn't matter.

> Command: Add-Keys
> Keys: Key1 Key2
> Key1-Addr: foo@bar.com
> Key1-Type: x509-cert
> Key1-Data: ascaslkcmakfmslkmlkdsjfsalkdjf
> Key2-Addr: foo@bar.com
> Key2-Type: pgp-public-key
> Key2-Something-Else: this is some other 
>  arbitrary attribute 
>  that demonstrates 
>  folding and unfolding. It is very very very very very very very very 
>  very very very long.
>

| Result: Success
|

> command: list-keys
>

| Key1-Addr: foo@bar.com
| Key1-Data: ascaslkcmakfmslkmlkdsjfsalkdjf
| Key1-Type: x509-cert
| Key2-Addr: foo@bar.com
| Key2-Something-Else: this is some other arbitrary attribute that demonst
|  rates folding and unfolding. It is very very very very very very very v
|  ery very very very very long.
| Key2-Type: pgp-public-key
| Keys: Key1 Key2 
| Result: Success
|

> command: list-keys
> type-regexp: ^pgp
>

| Key1-Addr: foo@bar.com
| Key1-Something-Else: this is some other arbitrary attribute that demonst
|  rates folding and unfolding. It is very very very very very very very v
|  ery very very very very long.
| Key1-Type: pgp-public-key
| Keys: Key1 
| Result: Success   
|

I plan on changing Result to something like Result-Code and Result-Text.

What do you think?

---1462177538-1746154377-981662889=:27013
Content-Type: APPLICATION/x-gzip; name="usmt-perl.tar.gz"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.21.0102081508090.27013@tron.admin.cto.netsol.com>
Content-Description: 
Content-Disposition: attachment; filename="usmt-perl.tar.gz"

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
0YsQLx10RpF3TqqZBFWPPoZDLmIIbnGFSwOdlBu036mpvu1TwtqkYEkgJZMN
I3kdDewH+CB619oUUZi6r0qhShMmi0kqlxS4KIX3zl3vS7Qo7fy1g+KkjIDG
h4oIlAXRlXZwk6oBK2Z6dtT1KeSFQKlx2km+sDLTTY2JMPAe96mkroVgyhSg
oVRZ3lRQopA2k2azWeQnI3oUi8lus4Fwi6wc3ZZKJXk1p4hD3XuwJ6ZubGQl
w0xdRAdRDYcj7DrhN5vsl0gZyGSILJ1Mqtn3x0iQKVSbuzKRa0Gue5f8MrwO
t3vwgDH+0p8I0hWK0/zfjIKthkYrKSnTMoKuChxpMC9XgnADIfJnf/8Lff/V
ogjT942LyWVxOFyWy+BkWRr/gD3I77/CtLR7/f+vkMsR+L//8tO46YCOK0jj
cf79/fdfMUY/16cPczNf2KNfd/6PuTysjjhewKt+o/rwhf19nVO97UrHmSef
Prc4pz9rT+dqYYqsYLqakZTwSP2U3JP23d+P6vvM6PazoilNZZeeWPRszeqm
W5knci5lJ5zMyOK0qndpk2OLhpcs/IuKidvtrQOh5I5bo3+dun59qfu90rdx
/MwP6z+qudgXy5Wftojvbr0zPPFI9sDTPHTBnA9r37m16c7BV85tv1NUNmXL
zrKOKT3W1rfkuj58dmDWrt6J9AUtjofF46cmDtgG7So43fnY8YL1q+euXI5i
Y2NGFr1+Zvm1Mx8SzHLzqNUDv1qwd0bn4FmbL26bdLwe2qtiitPvfnFt+SBm
08szm+l9xhSv7nlsM/TYBo54c89yaOjBU7T8c+z4BbRVF/Rvrdvf+dSqC3+/
ufn2bu3xtxbU3KneYLz95sMvfX53dM/yHw/G2Iz6C+eXFMyYM9JW9uSzM8Zv
p7265YWkRSdntCUvz+DHzY5pYe5Zgc7c+83s62tH/AxfvhN35b9fP/am6c71
g0uuMGVZCYzKOw2L1qyZqp5+hrD+MqS4X/XuwQ89vGnYmsUvpdjPc7FzKTfN
S6yj3xhV3OMug7N/6l9b8/r0+XXF+2k954or7gxi9K+ctmlyyTT+4sKH5vc6
siWdUzy/+au4ifHDpgiuY19vGnHaSTDy5kwa8XTcW6pLB1TbWvfuTLqw2OYY
18a5Sp9lMBeKplzcxurfq1jMfXVH5r6pxOmV7eO/HfHTio6W3vTr+Lsd3+/+
6oPtyeIRg4eIDM62gcfgfQeUkxqv0m7HJ2Sk7ZjXs0r91AlM8MsPMbp2+42v
8jf2/mUp6/PTazoupw/fv75xyPz578mWLlPHfLvC2utxFZbwcvplU0PiuAGL
WSPW9ulwMsbxexmSrl7PS/DM/km8UA/tiX28ZKZq9spp8GhpgmhAVUZHHN96
OLv3sVMDkpb2G0R7ecHWpLovenR6L50SCi+qjh9Wbc3Tb1rZuIsz/bHc6poW
9MalTTeOfnvj5aX19bIjNz9MHfZ69bqNCx9KnvrGgaaObXdinv35aP8RxKk5
m1ajG+elf7y1/mMZw/ufnvgefU/k/2UeL2v7zosNeYWdH7C+3KoQjXrlb21F
Zz7+ZnWr/FSDc/HhY5f3Nm42fpf52UvV3165dHLTC177XeYvu/bcFT6/c/hK
+rjhnz+6cD/2Wv+rquWrjh849WLaHOsrbfBOT8zCuhkrZubO+mHoLess09iZ
N1ynX1v3/tOHBk7fP3RCXK4xeZqbt+nrKdsnzhrweetjrY+0DXFZr+wb80pC
++q0nKJNR1L2v9bnYNzjnrm9NKscWbN+Grz2+f8atve64tGjyqfYLYuLMpdt
HTft2q2lG6YNJ/aOePW5dSP072Qvla+itz+iyBzZyh/lncFY8UhO6/ZPv1TP
psv/wdn9aZ8jW2altI3cvG/uWc/GCc+NKhqNf3a0peKvh5Cfeybd1KYu2n9u
12H7iEPb57Z/R3NZ+k8/9MyZx6d/l97ZNjSxgzNvwnt5Ld9f2dbaGjfidvYn
B344k72mM55TvG2+6B1JzSsnJt4d3ZZ9Pv2DS2mq07n8Y0Ts2NUDDzWMdC6b
17qFnz/mx0OOZwQfbJF37uVN4C8XxL9dvaVXwta7x4UtbzzcN9806OA3gtcH
rI0dWch6K/18e2vWudS59JtzOR2ltvzFR61tk2IHe2XvfrgEj1/x9dATVyuF
LXU3bu3Mbpur67867ol4VSxj16nNwz5J/LTnwrevSG/n132/+eziFdZbV2+2
8/X5J7e1fjpqobfUOzbOfHbBtPEtUxd98cxH4mXfvLe1tH4+75FVcZaC9hcv
f7mMNXjLC4M+Z+HoifKmm+xfs0Tbx8kF+v84r++7EZ80ZsTU2WtH/xjXosg9
NMY0a/HceUvezt5cJ0C8vb0ziQ/OvXa274XzjM9G97il20dfcvintvNnnn70
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
---1462177538-1746154377-981662889=:27013--