mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-19 21:35:13 +00:00
begin support for ed25519 keys, start with generation and channel storage
This commit is contained in:
parent
9ae93ba683
commit
1f985ca275
6 changed files with 95 additions and 1 deletions
|
@ -21,6 +21,8 @@ class Channel extends BaseObject
|
|||
public $channel_startpage;
|
||||
public $channel_pubkey;
|
||||
public $channel_prvkey;
|
||||
public $channel_epubkey;
|
||||
public $channel_eprvkey;
|
||||
public $channel_notifyflags;
|
||||
public $channel_pageflags;
|
||||
public $channel_dirdate;
|
||||
|
@ -312,6 +314,43 @@ class Channel extends BaseObject
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getEpubkey()
|
||||
{
|
||||
return $this->channel_epubkey;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $channel_epubkey
|
||||
* @return Channel
|
||||
*/
|
||||
public function setEpubkey($channel_epubkey)
|
||||
{
|
||||
$this->channel_epubkey = $channel_epubkey;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getEprvkey()
|
||||
{
|
||||
return $this->channel_eprvkey;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $channel_eprvkey
|
||||
* @return Channel
|
||||
*/
|
||||
public function setEprvkey($channel_eprvkey)
|
||||
{
|
||||
$this->channel_eprvkey = $channel_eprvkey;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
|
|
|
@ -366,6 +366,9 @@ class Channel
|
|||
} else {
|
||||
$key = Crypto::new_keypair(4096);
|
||||
}
|
||||
$eckey = sodium_crypto_sign_keypair();
|
||||
$ekey['pubkey'] = sodium_bin2base64(sodium_crypto_sign_publickey($eckey),SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING);
|
||||
$ekey['prvkey'] = sodium_bin2base64(sodium_crypto_sign_secretkey($eckey),SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING);
|
||||
|
||||
$sig = Libzot::sign($guid, $key['prvkey']);
|
||||
$hash = Libzot::make_xchan_hash($guid, $key['pubkey']);
|
||||
|
@ -420,6 +423,8 @@ class Channel
|
|||
->setHash($hash)
|
||||
->setPrvkey($key['prvkey'])
|
||||
->setPubkey($key['pubkey'])
|
||||
->setEprvkey($ekey['prvkey'])
|
||||
->setEpubkey($ekey['pubkey'])
|
||||
->setPageflags(intval($pageflags))
|
||||
->setSystem(intval($system))
|
||||
->setExpireDays($expire)
|
||||
|
@ -2227,6 +2232,8 @@ class Channel
|
|||
'channel_startpage' => ((array_key_exists('channel_startpage', $arr)) ? $arr['channel_startpage'] : ''),
|
||||
'channel_pubkey' => ((array_key_exists('channel_pubkey', $arr)) ? $arr['channel_pubkey'] : ''),
|
||||
'channel_prvkey' => ((array_key_exists('channel_prvkey', $arr)) ? $arr['channel_prvkey'] : ''),
|
||||
'channel_epubkey' => ((array_key_exists('channel_epubkey', $arr)) ? $arr['channel_epubkey'] : ''),
|
||||
'channel_eprvkey' => ((array_key_exists('channel_eprvkey', $arr)) ? $arr['channel_eprvkey'] : ''),
|
||||
'channel_notifyflags' => ((array_key_exists('channel_notifyflags', $arr)) ? $arr['channel_notifyflags'] : '65535'),
|
||||
'channel_pageflags' => ((array_key_exists('channel_pageflags', $arr)) ? $arr['channel_pageflags'] : '0'),
|
||||
'channel_dirdate' => ((array_key_exists('channel_dirdate', $arr)) ? $arr['channel_dirdate'] : NULL_DATE),
|
||||
|
|
44
Code/Update/_1271.php
Normal file
44
Code/Update/_1271.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
namespace Code\Update;
|
||||
|
||||
class _1271
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
|
||||
q("START TRANSACTION");
|
||||
|
||||
$r1 = q("ALTER TABLE channel ADD channel_epubkey text NOT NULL");
|
||||
$r2 = q("ALTER TABLE channel ADD channel_eprvkey text NOT NULL");
|
||||
|
||||
$r3 = q("select channel_id from channel where true");
|
||||
if ($r3) {
|
||||
foreach ($r3 as $channel) {
|
||||
$keys = sodium_crypto_sign_keypair();
|
||||
$pubkey = sodium_bin2base64(sodium_crypto_sign_publickey($keys),SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING);
|
||||
$prvkey = sodium_bin2base64(sodium_crypto_sign_secretkey($keys),SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING);
|
||||
q("update channel set channel_epubkey = '%s', channel_eprvkey = '%s' where channel_id = %d",
|
||||
dbesc($pubkey),
|
||||
dbesc($prvkey),
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($r1 && $r2) {
|
||||
q("COMMIT");
|
||||
return UPDATE_SUCCESS;
|
||||
}
|
||||
|
||||
q("ROLLBACK");
|
||||
return UPDATE_FAILED;
|
||||
}
|
||||
|
||||
public function verify()
|
||||
{
|
||||
$columns = db_columns('channel');
|
||||
return in_array('epubkey', $columns) && in_array('eprvkey', $columns);
|
||||
}
|
||||
}
|
||||
|
2
boot.php
2
boot.php
|
@ -26,7 +26,7 @@ use Code\Lib\Url;
|
|||
*/
|
||||
|
||||
const REPOSITORY_ID = 'streams';
|
||||
const DB_UPDATE_VERSION = 1270;
|
||||
const DB_UPDATE_VERSION = 1271;
|
||||
const PROJECT_BASE = __DIR__;
|
||||
const ACTIVITYPUB_ENABLED = true;
|
||||
const NOMAD_PROTOCOL_VERSION = '12.0';
|
||||
|
|
|
@ -259,6 +259,8 @@ CREATE TABLE IF NOT EXISTS `channel` (
|
|||
`channel_startpage` varchar(255) NOT NULL DEFAULT '',
|
||||
`channel_pubkey` text NOT NULL,
|
||||
`channel_prvkey` text NOT NULL,
|
||||
`channel_epubkey` text NOT NULL,
|
||||
`channel_eprvkey` text NOT NULL,
|
||||
`channel_notifyflags` int unsigned NOT NULL DEFAULT 1073741823,
|
||||
`channel_pageflags` int unsigned NOT NULL DEFAULT 0 ,
|
||||
`channel_dirdate` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
|
||||
|
|
|
@ -262,6 +262,8 @@ CREATE TABLE "channel" (
|
|||
"channel_startpage" text NOT NULL DEFAULT '',
|
||||
"channel_pubkey" text NOT NULL,
|
||||
"channel_prvkey" text NOT NULL,
|
||||
"channel_epubkey" text NOT NULL,
|
||||
"channel_eprvkey" text NOT NULL,
|
||||
"channel_notifyflags" bigint NOT NULL DEFAULT '1073741823',
|
||||
"channel_pageflags" bigint NOT NULL DEFAULT '0',
|
||||
"channel_dirdate" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00',
|
||||
|
|
Loading…
Reference in a new issue