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 |
︙ | ︙ |