Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | More work on lock mode |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
a79788a637fe0dec5a09983289e1544c |
| User & Date: | bernd 2019-07-11 15:21:13.203 |
Context
|
2019-07-11
| ||
| 17:52 | Bump version number check-in: 77e7c31c60 user: bernd tags: trunk, 0.9.0-20190711 | |
| 15:21 | More work on lock mode check-in: a79788a637 user: bernd tags: trunk | |
|
2019-07-10
| ||
| 23:48 | Work on locked chat check-in: 0e3fe94f9a user: bernd tags: trunk | |
Changes
Changes to cmd.fs.
| ︙ | ︙ | |||
675 676 677 678 679 680 681 |
also net2o-base
: +zero16 ( -- ) "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +cmdbuf ;
: sign[ ( -- ) neststart# @ nest-stack >stack
string "\x80\x00" +cmdbuf cmdbuf$ nip neststart# ! ;
: nest[ ( -- ) sign[ +zero16 ; \ add space for IV
| | < < | > > | 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 |
also net2o-base
: +zero16 ( -- ) "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +cmdbuf ;
: sign[ ( -- ) neststart# @ nest-stack >stack
string "\x80\x00" +cmdbuf cmdbuf$ nip neststart# ! ;
: nest[ ( -- ) sign[ +zero16 ; \ add space for IV
: ']nestsig ( xt -- )
$tmp +cmdbuf
cmd-resolve> >r cmdbuf$ drop - r> last-signed 2! nestsig ;
: ']sign ( xt -- )
c:0key nest$ c:hash ']nestsig ;
: ]sign ( -- ) ['] .sig ']sign ;
: ]pksign ( -- ) [: .pk .sig ;] ']sign ;
previous
: cmd> ( -- addr u )
+zero16 \ add space for checksum
|
| ︙ | ︙ |
Changes to crypt.fs.
| ︙ | ︙ | |||
604 605 606 607 608 609 610 |
: pk@ ( -- pk u )
my-key? .ke-pk $@ ;
: sk@ ( -- sk u )
my-key? .ke-sk sec@ ;
: sksig@ ( -- sksig u )
my-key? .ke-sksig sec@ ;
: .sig ( -- )
| | | 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 |
: pk@ ( -- pk u )
my-key? .ke-pk $@ ;
: sk@ ( -- sk u )
my-key? .ke-sk sec@ ;
: sksig@ ( -- sksig u )
my-key? .ke-sksig sec@ ;
: .sig ( -- )
+sig sigdate +date sigdate datesize# type
sig-params ed-sign type keysize emit ;
: .pk ( -- ) pk@ key| type ;
: pk-sig ( addr u -- sig u )
c:0key c:hash [: .pk .sig ;] $tmp ;
: +sig$ ( addr u -- hostaddr host-u ) [: type .sig ;] $tmp ;
: gen-host ( addr u -- addr' u' )
|
| ︙ | ︙ | |||
659 660 661 662 663 664 665 666 667 668 669 670 671 672 |
tf-out keysize type
tf-key tf_tweak256++
;] $[]map ;
: v-enc-gen ( keylist -- )
vdhe viv vsessionkey v-enc-loop ;
: v-enc$ ( keylist -- addr u )
['] v-enc-gen $tmp ;
\\\
Local Variables:
forth-local-words:
(
(("event:") definition-starter (font-lock-keyword-face . 1)
"[ \t\n]" t name (font-lock-function-name-face . 3))
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 |
tf-out keysize type
tf-key tf_tweak256++
;] $[]map ;
: v-enc-gen ( keylist -- )
vdhe viv vsessionkey v-enc-loop ;
: v-enc$ ( keylist -- addr u )
['] v-enc-gen $tmp ;
\ message encryption
: >modkey ( dstsk dstpk sk -- )
\ dup pad sct0 rot raw>sc25519
\ get0 sct0 ge25519*base
\ get0 ge25519-pack pad keysize 85type ." -["
voutkey state2# c:hash@
( voutkey $10 + keysize 85type ." ]> " )
sct0 voutkey $10 + 32b>sc25519 \ don't use first $10 bytes, used by $encrypt
sct1 sct0 sc25519/
sct0 swap raw>sc25519
sct2 sct0 sct1 sc25519*
get0 sct2 ge25519*base
( dup ) get0 ge25519-pack
( keysize 85type forth:cr )
sct2 sc25519>32b ;
: modkey> ( src dest -- )
( over keysize 85type ." -[" )
get0 rot ge25519-unpack- 0= !!no-ed-key!!
voutkey state2# c:hash@
( voutkey keysize 85type ." ]> " )
sct0 voutkey $10 + 32b>sc25519
get1 get0 sct0 ge25519*
dup get1 ge25519-pack
$80 swap ( over ) $1F + xorc!
( keysize 85type forth:cr ) ;
: decrypt-sig? ( key u msg u sig -- addr u sigerr )
{ pksig } $make -5 { w^ msg err }
msg $@ 2swap decrypt$ IF
pksig sigpksize# over date-sig? to err 2drop
err 0= IF
pksig pktmp modkey>
pksig sigpksize# keysize /string
pktmp keysize
2rot [: type type type ;] $tmp
2dup + 2 - $7F swap andc!
msg $free
err EXIT THEN THEN
2drop msg $free 0 0 err ;
: .encsign ( -- )
+sig sigdate +date
sktmp pktmp sk@ drop >modkey
pktmp keysize type sigdate datesize# type
sig-params 2drop sktmp pktmp ed-sign
2dup + 1- $80 swap orc! type
keysize emit ;
\\\
Local Variables:
forth-local-words:
(
(("event:") definition-starter (font-lock-keyword-face . 1)
"[ \t\n]" t name (font-lock-function-name-face . 3))
|
| ︙ | ︙ |
Changes to msg.fs.
| ︙ | ︙ | |||
323 324 325 326 327 328 329 |
2dup hashtmp over str= IF 2drop true UNLOOP EXIT
ELSE ( 2dup 85type ." <> " hashtmp over 85type ) THEN
LOOP
2drop false ;
: msg-key! ( addr u -- )
0 msg-group-o .msg:keys[] [: rot >r 2over str= r> or ;] $[]map
| | | 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
2dup hashtmp over str= IF 2drop true UNLOOP EXIT
ELSE ( 2dup 85type ." <> " hashtmp over 85type ) THEN
LOOP
2drop false ;
: msg-key! ( addr u -- )
0 msg-group-o .msg:keys[] [: rot >r 2over str= r> or ;] $[]map
IF 2drop ELSE \ ." msg-key+ " 2dup 85type forth:cr
$make msg-group-o .msg:keys[] >back THEN ;
\ message commands
scope{ net2o-base
\g
|
| ︙ | ︙ | |||
691 692 693 694 695 696 697 |
skip-sig? @ IF quicksig( pk-quick-sig? )else( pk-date? )
ELSE pk-sig? THEN ;
\ encrypt+sign
\ features: signature verification only when key is known
\ identity only revealed when correctly decrypted
| < < < < < < < < < < | < | < < | < < < < < | | < | < < < < < < < < < < < < < < < | < < < < < > | | 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 |
skip-sig? @ IF quicksig( pk-quick-sig? )else( pk-date? )
ELSE pk-sig? THEN ;
\ encrypt+sign
\ features: signature verification only when key is known
\ identity only revealed when correctly decrypted
: msg-dec-sig? ( addr u -- addr' u' flag )
sigpksize# - 2dup + { pksig }
msg-group-o .msg:keys[] $@ bounds U+DO
I $@ 2over pksig decrypt-sig?
dup -5 <> IF
>r 2nip r> unloop EXIT
THEN drop 2drop
cell +LOOP
sigpksize# + -5 ;
: msg-dec?-sig? ( addr u -- addr' u' flag )
2dup 2 - + c@ $80 and IF msg-dec-sig? ELSE msg-sig? THEN ;
\ generate an encryt+sign packet
: ]encpksign ( -- )
+zero16 nest$
0 msg-group-o .msg:keys[] $[]@ encrypt$
['] .encsign ']nestsig ;
\ nest-sig for msg/msging classes
' msg-dec?-sig? ' message 2dup
msging-class is start-req
msging-class is nest-sig
msg-class is start-req
|
| ︙ | ︙ | |||
1035 1036 1037 1038 1039 1040 1041 |
[: last# >r o IF 2dup do-msg-nestsig
ELSE 2dup display-one-msg THEN r> to last#
0 .avalanche-msg ;] [group] drop notify- ;
\ chat message, text only
: msg-tdisplay ( addr u -- )
| | > > | 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 |
[: last# >r o IF 2dup do-msg-nestsig
ELSE 2dup display-one-msg THEN r> to last#
0 .avalanche-msg ;] [group] drop notify- ;
\ chat message, text only
: msg-tdisplay ( addr u -- )
2dup 2 - + c@ $80 and IF net2o-base:msg-dec-sig? IF
2drop <err> ." Undecryptable message" <default> cr EXIT
THEN <info> THEN
sigpksize# - 2dup + sigpksize# >$ c-state off
nest-cmd-loop msg:end ;
' msg-tdisplay msg-class is msg:display
' msg-tdisplay msg-notify-class is msg:display
: msg-tredisplay ( n -- )
reset-time
msg-group-o .msg:mode dup @ msg:otr# invert and swap
|
| ︙ | ︙ | |||
1513 1514 1515 1516 1517 1518 1519 |
;] (send-avalanche) drop .chat save-msgs&
;] !wrapper ; is /otrify
:noname ( addr u -- )
msg-group-o .msg:-lock
word-args ['] args>keylist execute-parsing
[: key-list v-enc$ $, net2o-base:msg-lock ;] send-avalanche
| | | 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 |
;] (send-avalanche) drop .chat save-msgs&
;] !wrapper ; is /otrify
:noname ( addr u -- )
msg-group-o .msg:-lock
word-args ['] args>keylist execute-parsing
[: key-list v-enc$ $, net2o-base:msg-lock ;] send-avalanche
vkey keysize $make msg-group-o .msg:keys[] >back
msg-group-o .msg:+lock
; is /lock
:noname ( addr u -- )
2drop msg-group-o .msg:-lock ; is /unlock
:noname ( addr u -- )
2drop -1 [IFDEF] android android:level# [ELSE] level# [THEN] +! ; is /bye
|
| ︙ | ︙ |