Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Work on locked chat |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
0e3fe94f9a488b9a18ec0014f24c6674 |
| User & Date: | bernd 2019-07-10 23:48:54.008 |
Context
|
2019-07-11
| ||
| 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 | |
|
2019-07-09
| ||
| 22:22 | More on locked chat check-in: 604bb8e573 user: bernd tags: trunk | |
Changes
Changes to err.fs.
| ︙ | ︙ | |||
50 51 52 53 54 55 56 57 58 59 60 61 62 63 | s" no key file" throwcode !!nokey!! s" invalid Ed25519 key" throwcode !!no-ed-key!! s" wrong key size" throwcode !!keysize!! s" no signature appended" throwcode !!no-sig!! s" future signature" throwcode !!new-sig!! s" expired signature" throwcode !!old-sig!! s" invalid signature" throwcode !!inv-sig!! s" no temporary key" throwcode !!no-tmpkey!! s" generic stack empty" throwcode !!stack-empty!! s" String stack full" throwcode !!string-full!! s" String stack empty" throwcode !!string-empty!! s" Object stack full" throwcode !!object-full!! s" Object stack empty" throwcode !!object-empty!! s" Unknown crypto function" throwcode !!unknown-crypt!! | > | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | s" no key file" throwcode !!nokey!! s" invalid Ed25519 key" throwcode !!no-ed-key!! s" wrong key size" throwcode !!keysize!! s" no signature appended" throwcode !!no-sig!! s" future signature" throwcode !!new-sig!! s" expired signature" throwcode !!old-sig!! s" invalid signature" throwcode !!inv-sig!! s" failed to open message" throwcode !!msg-locked!! s" no temporary key" throwcode !!no-tmpkey!! s" generic stack empty" throwcode !!stack-empty!! s" String stack full" throwcode !!string-full!! s" String stack empty" throwcode !!string-empty!! s" Object stack full" throwcode !!object-full!! s" Object stack empty" throwcode !!object-empty!! s" Unknown crypto function" throwcode !!unknown-crypt!! |
| ︙ | ︙ |
Changes to msg.fs.
| ︙ | ︙ | |||
40 41 42 43 44 45 46 |
\G forward message to all next nodes of that message group
{ d: msgx }
msg-group-o .msg:peers[] $@
bounds ?DO I @ o <> IF msgx I @ .avalanche-to THEN
cell +LOOP ;
Variable msg-group$
| < | 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
\G forward message to all next nodes of that message group
{ d: msgx }
msg-group-o .msg:peers[] $@
bounds ?DO I @ o <> IF msgx I @ .avalanche-to THEN
cell +LOOP ;
Variable msg-group$
User replay-mode
User skip-sig?
Sema msglog-sema
: ?msg-context ( -- o )
msging-context @ dup 0= IF
|
| ︙ | ︙ | |||
323 324 325 326 327 328 329 |
c:0key I msg-group-o .msg:log[] $[]@ sigonly@ >hash
2dup hashtmp over str= IF 2drop true UNLOOP EXIT
ELSE ( 2dup 85type ." <> " hashtmp over 85type ) THEN
LOOP
2drop false ;
: msg-key! ( addr u -- )
| | | > | 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 |
c:0key I msg-group-o .msg:log[] $[]@ sigonly@ >hash
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
\g ### message commands ###
|
| ︙ | ︙ | |||
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 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 |
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
: modkey> ( src dest -- )
( over keysize 85type ." -[" )
get0 rot ge25519-unpack- 0= !!no-ed-key!!
voutkey keysize c:hash@
( voutkey keysize 85type ." ]> " )
sct0 voutkey 32b>sc25519
get1 get0 sct0 ge25519*
dup get1 ge25519-pack
$80 swap ( over ) $1F + xorc!
( keysize 85type forth:cr ) ;
: msg-dec-sig? ( addr u -- addr' u' flag )
sigpksize# - 2dup + -5 { pksig err }
msg-group-o .msg:keys[] $@ bounds U+DO
2dup $make { w^ msg }
msg $@ I $@ decrypt$ IF
pksig sigpksize# over date-sig? to err
pksig pktmp modkey>
err 0= IF
pksig sigpksize# keysize /string
pktmp keysize
2rot [: type type type ;] $tmp
2dup + 2 - $7F swap andc!
msg $free
err unloop EXIT THEN THEN
2drop
msg $free
cell +LOOP
sigpksize# + err ;
: 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
: >modkey ( dstsk dstpk sk -- )
\ dup pad sct0 rot raw>sc25519
\ get0 sct0 ge25519*base
\ get0 ge25519-pack pad keysize 85type ." -["
voutkey keysize c:hash@
( voutkey keysize 85type ." ]> " )
sct0 voutkey 32b>sc25519
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 ;
: ]encpksign ( -- )
+zero16 nest$ msg-group-o .msg:keys[] dup $[]# 1- swap $[]@ encrypt$
sigdate +date
sktmp pktmp sk@ drop >modkey
[: pktmp keysize forth:type sigdate datesize# forth:type
sig-params 2drop sktmp pktmp ed-sign
2dup + 1- $80 swap orc! forth:type
keysize forth:emit ;] ']sign ;
|
| ︙ | ︙ | |||
1498 1499 1500 1501 1502 1503 1504 |
;] (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
| | | 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 |
;] (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 msg-group-o .msg:keys[] $+[]!
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
|
| ︙ | ︙ |