[{"data":1,"prerenderedAt":234},["ShallowReactive",2],{"project-15481298":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":34,"aspects":35,"strip":40,"post_text":42,"what":43,"said":79,"maker_in_thread":145,"shape":149,"grid":154,"attempts":195,"same_week":196,"maker_shows":41,"maker_hidden":226,"reader_version":227,"card":228},"15481298","libsignal-node","Node.js port of WhisperSystem's libsignal","title","Show HN: Node.js port of WhisperSystem's libsignal","https:\u002F\u002Fgithub.com\u002FForstaLabs\u002Flibsignal-node","github.com","tooker",1508135755,2017,88,16,516,2242,24,"notable","security_privacy","end-to-end encryption library","library",[24,25,26,27],"signal protocol","node.js","end-to-end encryption","libsignal","roasted",-0.438,{"positive":31,"neutral":32,"mixed":31,"critical":33},0,3,4,7,{"docs":36,"execution":38,"idea":39},{"positive":31,"critical":37},2,{"positive":31,"critical":37},{"positive":31,"critical":31},[41,32,32,31,31,31,31,32,31,31,31,31,41,31,41,41],1,null,{"problem":44,"audience":42,"pricing":42,"motivation":53,"time_to_build":42,"stack":57,"openness":76,"stage":77,"team_size":78},{"value":45,"source":46,"evidence":47},"Brings Signal protocol encryption to Node.js","maker",[48,50],{"id":49},"post",{"id":51,"by":11,"text":52},"15484845","It's ported directly from the javascript lib so most of the interfaces are exactly the same (async differences in some cases and a couple storage interface differences, see:…",{"value":54,"source":46,"evidence":55},"Used for various bots in the maker's Signal-based message platform",[56],{"id":51,"by":11,"text":52},[58,62,70],{"value":59,"source":46,"evidence":60},"JavaScript",[61],{"id":51,"by":11,"text":52},{"value":63,"source":64,"evidence":65},"Node.js (v8+)","commenter",[66],{"id":67,"by":68,"text":69},"15481656","egeozcan","This has a native part written in c and only runs on node.js v8 and up, according to the package.json.",{"value":71,"source":46,"evidence":72},"C via emscripten (curve25519-donna, ed25519)",[73],{"id":74,"by":11,"text":75},"15484005","The C components are just a few emscripten compiled curve25519-donna and ed25519 functions for elliptic curve routines. It comes directly from the web library without any…","open_source","launched","team",{"praise":80,"objections":89,"requests":119,"questions":128,"alternatives":140},[81,85],{"value":82,"source":46,"evidence":83},"Ported directly from the JavaScript library, keeping interfaces and commit history",[84],{"id":51,"by":11,"text":52},{"value":86,"source":46,"evidence":87},"Emscripten builds of the crypto functions have been reliable and performant",[88],{"id":74,"by":11,"text":75},[90,101,108,115],{"value":91,"source":64,"evidence":92},"No tests, so compatibility with libsignal is unverified",[93,97],{"id":94,"by":95,"text":96},"15481630","TheAceOfHearts","One of the nice things about JS versions of stuff is being able to run it everywhere. With that being said, I'd be skeptical of using this since it doesn't appear to have any…",{"id":98,"by":99,"text":100},"15484581","micaksica","How much is this based on the libsignal-protocol-JavaScript code? Where does it differ from it? Where are the tests to test protocol steps? I actually love seeing things like…",{"value":102,"source":64,"evidence":103},"Written in JavaScript rather than TypeScript, lacking type safety",[104],{"id":105,"by":106,"text":107},"15481809","sandGorgon","What disturbs me about this port is that they did not use Typescript. I would have expected that they would use a strongly typesafe language in the ideal case.",{"value":109,"source":64,"evidence":110},"Native C bindings can crash the process on bad input",[111],{"id":112,"by":113,"text":114},"15483758","partycoder","Many checks still need to be done in runtime. Bindings to C code can cause the program to exit if you pass incorrect input.",{"value":116,"source":64,"evidence":117},"Crypto library is risky to adopt while new and under-documented",[118],{"id":98,"by":99,"text":100},[120,124],{"value":121,"source":64,"evidence":122},"Add documentation",[123],{"id":98,"by":99,"text":100},{"value":125,"source":64,"evidence":126},"Port the tests",[127],{"id":51,"by":11,"text":52},[129,133],{"value":130,"source":64,"evidence":131},"How closely is it based on libsignal-protocol-JavaScript and where does it differ?",[132],{"id":98,"by":99,"text":100},{"value":134,"source":64,"evidence":135},"Is it a true port or just bindings?",[136],{"id":137,"by":138,"text":139},"15481793","qznc","So it is \"bindings\", but not a \"port\"?",[141],{"value":142,"source":64,"evidence":143},"libsignal-protocol-javascript (the original JavaScript library)",[144],{"id":98,"by":99,"text":100},{"comments":37,"answered":41,"key":146},[147,148],{"id":74,"text":75},{"id":51,"text":52},{"commenters":150,"max_depth":151,"maker_replies":37,"first_comment_mins":152,"lifespan_hours":153},14,5,100,36,[155,157,159,161,163,167,171,174,177,180,183,186,188,190,192,194],[94,31,41,156,95,31],"project\u002Fcritical\u002Fdocs",[67,31,32,158,68,31],"project\u002Fneutral\u002Fexecution",[137,31,32,160,138,31],"project\u002Fneutral\u002Fidea",[74,31,31,162,11,41],"maker\u002Fpositive\u002Fperformance",[164,31,31,165,166,31],"15481965","commenter\u002Fneutral\u002Fnone","mschulze",[168,31,31,169,170,31],"15482362","other\u002Fneutral\u002Fnone","Zoon",[172,31,31,169,173,31],"15483464","jdc0589",[175,31,32,158,176,31],"15483561","kristiandupont",[178,31,31,169,179,31],"15483869","jszymborski",[181,31,31,169,182,31],"15484267","dabockster",[184,31,31,169,185,31],"15485652","justinjlynn",[187,31,31,169,182,31],"15493190",[98,41,41,189,99,31],"maker\u002Fcritical\u002Fdocs",[51,41,31,191,11,41],"maker\u002Fpositive\u002Fexecution",[105,37,41,193,106,31],"project\u002Fcritical\u002Fexecution",[112,37,41,193,113,31],[],[197,202,207,212,217,221],{"id":198,"name":199,"points":200,"category":201},"15492248","Metaballs",673,"creative",{"id":203,"name":204,"points":205,"category":206},"15466817","CoinMall Alpha",156,"finance_crypto",{"id":208,"name":209,"points":210,"category":211},"15484390","FaxRocket",152,"productivity",{"id":213,"name":214,"points":215,"category":216},"15489535","BOOLR",136,"learning_science",{"id":218,"name":219,"points":220,"category":211},"15494655","Writing",133,{"id":222,"name":223,"points":224,"category":225},"15461000","Vue-Model",109,"languages",false,"v2",{"id":229,"name":5,"line":6,"ai":226,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":230,"top":18,"kw":231,"maker":11,"domain":10,"tier":19,"attempts":31,"strip":232,"url":9,"mix":233,"praise":82,"objection":91,"sub":21},15481298,-0.44,[24,25,26,27],"1330000300001011",[31,32,31,33],1794036559804]