Compare commits
64 commits
nupplaphil
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
| c4876d46b4 | |||
| 8400258f07 | |||
| 8f29a51277 | |||
| b34c9131ca | |||
| a733e82c21 | |||
| 5d8a53b8ec | |||
| dac297b942 | |||
| dc02e16575 | |||
| d8af084933 | |||
| 477e646fba | |||
| 5307ef3a58 | |||
| 4c3b4dea96 | |||
| c811f54958 | |||
| becf10cee6 | |||
| bb72210fc1 | |||
| da65314df5 | |||
| fbf3653831 | |||
| 9e7f06ed44 | |||
| c137fc5e79 | |||
| 9c8e7a23a6 | |||
| 71eb147c13 | |||
| 5cae2bffb2 | |||
| 972c2da98e | |||
| 8a83cc2886 | |||
| c94778dbc1 | |||
| 9f0b5829c0 | |||
| 7bc98f0dd9 | |||
| 1c677722b3 | |||
| 99639632dd | |||
| 91bb323a16 | |||
| 852ddb8acc | |||
| 9732ad543b | |||
| 37cdd74d73 | |||
| c1830d8fd1 | |||
| 7dc1b44d1e | |||
| 3f2cc73936 | |||
| 94129d3aa5 | |||
| 5ea5930d82 | |||
| efdc4fa3c0 | |||
| 888dec1593 | |||
| 82376e4f17 | |||
| 2805395f77 | |||
| f5d1316212 | |||
| b46e8ec4b2 | |||
| 878538c151 | |||
| a959a90582 | |||
| c8b6e7661b | |||
| 9183371062 | |||
| 8641c30530 | |||
| 388f6e94f0 | |||
| 2dd57a2f40 | |||
|
92c3d0cf6c |
|||
|
c5d402ad62 |
|||
|
ecdd62eb3c |
|||
|
4a57f968f8 |
|||
| 30af3b93ed | |||
| 6a5103964f | |||
| 6b3dc35f35 | |||
|
648fadedd3 |
|||
| 75df306424 | |||
| ace982f5e6 | |||
|
b7614c9164 |
|||
|
|
85275d4473 |
||
| 17df97fccd |
606 changed files with 66319 additions and 4746 deletions
|
|
@ -6,5 +6,24 @@ root = true
|
|||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
trim_trailing_whitespaces = true
|
||||
indent_style = tab
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
quote_type = single
|
||||
max_line_length = off
|
||||
|
||||
[*.js]
|
||||
quote_type = double
|
||||
ij_javascript_use_double_quotes = true
|
||||
|
||||
[*.yml]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.xml]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.json]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
|
|
|||
266
.tx/config
266
.tx/config
|
|
@ -1,399 +1,399 @@
|
|||
[main]
|
||||
host = https://www.transifex.com
|
||||
host = https://api.transifex.com
|
||||
|
||||
[friendica.addon_advancedcontentfilter_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_advancedcontentfilter_messagespo]
|
||||
file_filter = advancedcontentfilter/lang/<lang>/messages.po
|
||||
source_file = advancedcontentfilter/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_blackout_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_blackout_messagespo]
|
||||
file_filter = blackout/lang/<lang>/messages.po
|
||||
source_file = blackout/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_blockem_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_blockem_messagespo]
|
||||
file_filter = blockem/lang/<lang>/messages.po
|
||||
source_file = blockem/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_blogger_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_blogger_messagespo]
|
||||
file_filter = blogger/lang/<lang>/messages.po
|
||||
source_file = blogger/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_buffer_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_buffer_messagespo]
|
||||
file_filter = buffer/lang/<lang>/messages.po
|
||||
source_file = buffer/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_buglink_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_buglink_messagespo]
|
||||
file_filter = buglink/lang/<lang>/messages.po
|
||||
source_file = buglink/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_catavatar_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_catavatar_messagespo]
|
||||
file_filter = catavatar/lang/<lang>/messages.po
|
||||
source_file = catavatar/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_cookienotice_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_cookienotice_messagespo]
|
||||
file_filter = cookienotice/lang/<lang>/messages.po
|
||||
source_file = cookienotice/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_curweather_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_curweather_messagespo]
|
||||
file_filter = curweather/lang/<lang>/messages.po
|
||||
source_file = curweather/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_diaspora_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_diaspora_messagespo]
|
||||
file_filter = diaspora/lang/<lang>/messages.po
|
||||
source_file = diaspora/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_dwpost_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_dwpost_messagespo]
|
||||
file_filter = dwpost/lang/<lang>/messages.po
|
||||
source_file = dwpost/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_forumdirectory_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_forumdirectory_messagespo]
|
||||
file_filter = forumdirectory/lang/<lang>/messages.po
|
||||
source_file = forumdirectory/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_fromapp_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_fromapp_messagespo]
|
||||
file_filter = fromapp/lang/<lang>/messages.po
|
||||
source_file = fromapp/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_fromgplus_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_fromgplus_messagespo]
|
||||
file_filter = fromgplus/lang/<lang>/messages.po
|
||||
source_file = fromgplus/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_geonames_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_geonames_messagespo]
|
||||
file_filter = geonames/lang/<lang>/messages.po
|
||||
source_file = geonames/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_gnot_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_gnot_messagespo]
|
||||
file_filter = gnot/lang/<lang>/messages.po
|
||||
source_file = gnot/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_gravatar_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_gravatar_messagespo]
|
||||
file_filter = gravatar/lang/<lang>/messages.po
|
||||
source_file = gravatar/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_group_text_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_group_text_messagespo]
|
||||
file_filter = group_text/lang/<lang>/messages.po
|
||||
source_file = group_text/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_ifttt_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_ifttt_messagespo]
|
||||
file_filter = ifttt/lang/<lang>/messages.po
|
||||
source_file = ifttt/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_ijpost_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_ijpost_messagespo]
|
||||
file_filter = ijpost/lang/<lang>/messages.po
|
||||
source_file = ijpost/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_impressum_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_impressum_messagespo]
|
||||
file_filter = impressum/lang/<lang>/messages.po
|
||||
source_file = impressum/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_infiniteimprobabilitydrive_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_infiniteimprobabilitydrive_messagespo]
|
||||
file_filter = infiniteimprobabilitydrive/lang/<lang>/messages.po
|
||||
source_file = infiniteimprobabilitydrive/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_irc_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_irc_messagespo]
|
||||
file_filter = irc/lang/<lang>/messages.po
|
||||
source_file = irc/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_jappixmini_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_jappixmini_messagespo]
|
||||
file_filter = jappixmini/lang/<lang>/messages.po
|
||||
source_file = jappixmini/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_js_upload_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_js_upload_messagespo]
|
||||
file_filter = js_upload/lang/<lang>/messages.po
|
||||
source_file = js_upload/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_krynn_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_krynn_messagespo]
|
||||
file_filter = krynn/lang/<lang>/messages.po
|
||||
source_file = krynn/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_langfilter_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_langfilter_messagespo]
|
||||
file_filter = langfilter/lang/<lang>/messages.po
|
||||
source_file = langfilter/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_libertree_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_libertree_messagespo]
|
||||
file_filter = libertree/lang/<lang>/messages.po
|
||||
source_file = libertree/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_libravatar_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_libravatar_messagespo]
|
||||
file_filter = libravatar/lang/<lang>/messages.po
|
||||
source_file = libravatar/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_ljpost_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_ljpost_messagespo]
|
||||
file_filter = ljpost/lang/<lang>/messages.po
|
||||
source_file = ljpost/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_mailstream_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_mailstream_messagespo]
|
||||
file_filter = mailstream/lang/<lang>/messages.po
|
||||
source_file = mailstream/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_mathjax_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_mathjax_messagespo]
|
||||
file_filter = mathjax/lang/<lang>/messages.po
|
||||
source_file = mathjax/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_membersince_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_membersince_messagespo]
|
||||
file_filter = membersince/lang/<lang>/messages.po
|
||||
source_file = membersince/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_morechoice_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_morechoice_messagespo]
|
||||
file_filter = morechoice/lang/<lang>/messages.po
|
||||
source_file = morechoice/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_morepokes_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_morepokes_messagespo]
|
||||
file_filter = morepokes/lang/<lang>/messages.po
|
||||
source_file = morepokes/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_newmemberwidget_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_newmemberwidget_messagespo]
|
||||
file_filter = newmemberwidget/lang/<lang>/messages.po
|
||||
source_file = newmemberwidget/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_notifyall_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_notifyall_messagespo]
|
||||
file_filter = notifyall/lang/<lang>/messages.po
|
||||
source_file = notifyall/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_notimeline_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_notimeline_messagespo]
|
||||
file_filter = notimeline/lang/<lang>/messages.po
|
||||
source_file = notimeline/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_nsfw_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_nsfw_messagespo]
|
||||
file_filter = nsfw/lang/<lang>/messages.po
|
||||
source_file = nsfw/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_numfriends_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_numfriends_messagespo]
|
||||
file_filter = numfriends/lang/<lang>/messages.po
|
||||
source_file = numfriends/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_openstreetmap_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_openstreetmap_messagespo]
|
||||
file_filter = openstreetmap/lang/<lang>/messages.po
|
||||
source_file = openstreetmap/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_pageheader_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_pageheader_messagespo]
|
||||
file_filter = pageheader/lang/<lang>/messages.po
|
||||
source_file = pageheader/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_piwik_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_piwik_messagespo]
|
||||
file_filter = piwik/lang/<lang>/messages.po
|
||||
source_file = piwik/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_planets_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_planets_messagespo]
|
||||
file_filter = planets/lang/<lang>/messages.po
|
||||
source_file = planets/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_public_server_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_public_server_messagespo]
|
||||
file_filter = public_server/lang/<lang>/messages.po
|
||||
source_file = public_server/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_pumpio_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_pumpio_messagespo]
|
||||
file_filter = pumpio/lang/<lang>/messages.po
|
||||
source_file = pumpio/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_qcomment_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_qcomment_messagespo]
|
||||
file_filter = qcomment/lang/<lang>/messages.po
|
||||
source_file = qcomment/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_randplace_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_randplace_messagespo]
|
||||
file_filter = randplace/lang/<lang>/messages.po
|
||||
source_file = randplace/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_remote_permissions_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_remote_permissions_messagespo]
|
||||
file_filter = remote_permissions/lang/<lang>/messages.po
|
||||
source_file = remote_permissions/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_rendertime_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_rendertime_messagespo]
|
||||
file_filter = rendertime/lang/<lang>/messages.po
|
||||
source_file = rendertime/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_securemail_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_securemail_messagespo]
|
||||
file_filter = securemail/lang/<lang>/messages.po
|
||||
source_file = securemail/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_showmore_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_showmore_messagespo]
|
||||
file_filter = showmore/lang/<lang>/messages.po
|
||||
source_file = showmore/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_smileybutton_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_smileybutton_messagespo]
|
||||
file_filter = smileybutton/lang/<lang>/messages.po
|
||||
source_file = smileybutton/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_startpage_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_startpage_messagespo]
|
||||
file_filter = startpage/lang/<lang>/messages.po
|
||||
source_file = startpage/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_statusnet_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_statusnet_messagespo]
|
||||
file_filter = statusnet/lang/<lang>/messages.po
|
||||
source_file = statusnet/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_superblock_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_superblock_messagespo]
|
||||
file_filter = superblock/lang/<lang>/messages.po
|
||||
source_file = superblock/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_testdrive_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_testdrive_messagespo]
|
||||
file_filter = testdrive/lang/<lang>/messages.po
|
||||
source_file = testdrive/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_tictac_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_tictac_messagespo]
|
||||
file_filter = tictac/lang/<lang>/messages.po
|
||||
source_file = tictac/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_tumblr_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_tumblr_messagespo]
|
||||
file_filter = tumblr/lang/<lang>/messages.po
|
||||
source_file = tumblr/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_twitter_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_twitter_messagespo]
|
||||
file_filter = twitter/lang/<lang>/messages.po
|
||||
source_file = twitter/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_viewsrc_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_viewsrc_messagespo]
|
||||
file_filter = viewsrc/lang/<lang>/messages.po
|
||||
source_file = viewsrc/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_webrtc_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_webrtc_messagespo]
|
||||
file_filter = webrtc/lang/<lang>/messages.po
|
||||
source_file = webrtc/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_widgets_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_widgets_messagespo]
|
||||
file_filter = widgets/lang/<lang>/messages.po
|
||||
source_file = widgets/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_windowsphonepush_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_windowsphonepush_messagespo]
|
||||
file_filter = windowsphonepush/lang/<lang>/messages.po
|
||||
source_file = windowsphonepush/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_wppost_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_wppost_messagespo]
|
||||
file_filter = wppost/lang/<lang>/messages.po
|
||||
source_file = wppost/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
[friendica.addon_xmpp_messagespo]
|
||||
[o:Friendica:p:friendica:r:addon_xmpp_messagespo]
|
||||
file_filter = xmpp/lang/<lang>/messages.po
|
||||
source_file = xmpp/lang/C/messages.po
|
||||
source_lang = en
|
||||
type = PO
|
||||
type = PO
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ msgstr ""
|
|||
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
|
||||
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2022\n"
|
||||
"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -3,60 +3,63 @@
|
|||
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2018
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-04-17 04:04+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>, 2018\n"
|
||||
"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n"
|
||||
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
|
||||
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: advancedcontentfilter.php:134
|
||||
#: advancedcontentfilter.php:154
|
||||
#, php-format
|
||||
msgid "Filtered by rule: %s"
|
||||
msgstr "Filtrato dalla regola: %s"
|
||||
|
||||
#: advancedcontentfilter.php:147 advancedcontentfilter.php:204
|
||||
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
|
||||
msgid "Advanced Content Filter"
|
||||
msgstr "Filtro Avanzato Contenuti"
|
||||
|
||||
#: advancedcontentfilter.php:203
|
||||
#: advancedcontentfilter.php:224
|
||||
msgid "Back to Addon Settings"
|
||||
msgstr "Torna alle impostazioni del componente aggiuntivo"
|
||||
|
||||
#: advancedcontentfilter.php:205
|
||||
#: advancedcontentfilter.php:226
|
||||
msgid "Add a Rule"
|
||||
msgstr "Aggiungi una regola"
|
||||
|
||||
#: advancedcontentfilter.php:206
|
||||
#: advancedcontentfilter.php:227
|
||||
msgid "Help"
|
||||
msgstr "Aiuto"
|
||||
|
||||
#: advancedcontentfilter.php:207
|
||||
#: advancedcontentfilter.php:228
|
||||
msgid ""
|
||||
"Add and manage your personal content filter rules in this screen. Rules have"
|
||||
" a name and an arbitrary expression that will be matched against post data. "
|
||||
"For a complete reference of the available operations and variables, check "
|
||||
"the <a href=\"advancedcontentfilter/help\">help page</a>."
|
||||
"the help page."
|
||||
msgstr ""
|
||||
"Aggiungi e gestisci le tue regole personali di filtro contenuti in questa "
|
||||
"schermata. Le regole hanno un nome e un'espressione arbitraria che sarà "
|
||||
"confrontata con i dati del messaggio. Per un elenco completo delle "
|
||||
"operazioni disponibili, controlla la <a "
|
||||
"href=\"advancedcontentfilter/help\">pagina di aiuto</a>."
|
||||
"operazioni e variabili disponibili, controlla la pagina di aiuto."
|
||||
|
||||
#: advancedcontentfilter.php:208
|
||||
#: advancedcontentfilter.php:229
|
||||
msgid "Your rules"
|
||||
msgstr "Le tue regole"
|
||||
|
||||
#: advancedcontentfilter.php:209
|
||||
#: advancedcontentfilter.php:230
|
||||
msgid ""
|
||||
"You have no rules yet! Start adding one by clicking on the button above next"
|
||||
" to the title."
|
||||
|
|
@ -64,110 +67,106 @@ msgstr ""
|
|||
"Non hai ancora nessuna regola! Aggiungine una cliccando sul bottone qui "
|
||||
"sopra a fianco al titolo."
|
||||
|
||||
#: advancedcontentfilter.php:210
|
||||
#: advancedcontentfilter.php:231
|
||||
msgid "Disabled"
|
||||
msgstr "Disabilitato"
|
||||
|
||||
#: advancedcontentfilter.php:211
|
||||
#: advancedcontentfilter.php:232
|
||||
msgid "Enabled"
|
||||
msgstr "Abilitato"
|
||||
|
||||
#: advancedcontentfilter.php:212
|
||||
#: advancedcontentfilter.php:233
|
||||
msgid "Disable this rule"
|
||||
msgstr "Diabilita questa regola"
|
||||
|
||||
#: advancedcontentfilter.php:213
|
||||
#: advancedcontentfilter.php:234
|
||||
msgid "Enable this rule"
|
||||
msgstr "Abilita questa regola"
|
||||
|
||||
#: advancedcontentfilter.php:214
|
||||
#: advancedcontentfilter.php:235
|
||||
msgid "Edit this rule"
|
||||
msgstr "Modifica questa regola"
|
||||
|
||||
#: advancedcontentfilter.php:215
|
||||
#: advancedcontentfilter.php:236
|
||||
msgid "Edit the rule"
|
||||
msgstr "Modifica la regola"
|
||||
|
||||
#: advancedcontentfilter.php:216
|
||||
#: advancedcontentfilter.php:237
|
||||
msgid "Save this rule"
|
||||
msgstr "Salva questa regola"
|
||||
|
||||
#: advancedcontentfilter.php:217
|
||||
#: advancedcontentfilter.php:238
|
||||
msgid "Delete this rule"
|
||||
msgstr "Elimina questa regola"
|
||||
|
||||
#: advancedcontentfilter.php:218
|
||||
#: advancedcontentfilter.php:239
|
||||
msgid "Rule"
|
||||
msgstr "Regola"
|
||||
|
||||
#: advancedcontentfilter.php:219
|
||||
#: advancedcontentfilter.php:240
|
||||
msgid "Close"
|
||||
msgstr "Chiudi"
|
||||
|
||||
#: advancedcontentfilter.php:220
|
||||
#: advancedcontentfilter.php:241
|
||||
msgid "Add new rule"
|
||||
msgstr "Aggiungi nuova regola"
|
||||
|
||||
#: advancedcontentfilter.php:221
|
||||
#: advancedcontentfilter.php:242
|
||||
msgid "Rule Name"
|
||||
msgstr "Nome Regola"
|
||||
|
||||
#: advancedcontentfilter.php:222
|
||||
#: advancedcontentfilter.php:243
|
||||
msgid "Rule Expression"
|
||||
msgstr "Espressione Regola"
|
||||
|
||||
#: advancedcontentfilter.php:223
|
||||
msgid ""
|
||||
"<p>Examples:</p><ul><li><pre>author_link == "
|
||||
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
|
||||
msgstr ""
|
||||
"<p>Esempi:</p><ul><li><pre>author_link == "
|
||||
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
|
||||
|
||||
#: advancedcontentfilter.php:224
|
||||
#: advancedcontentfilter.php:244
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: advancedcontentfilter.php:290 advancedcontentfilter.php:301
|
||||
#: advancedcontentfilter.php:312 advancedcontentfilter.php:346
|
||||
#: advancedcontentfilter.php:375 advancedcontentfilter.php:396
|
||||
#: advancedcontentfilter.php:295
|
||||
msgid "This addon requires this node having at least one post"
|
||||
msgstr ""
|
||||
|
||||
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
|
||||
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
|
||||
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
|
||||
msgid "You must be logged in to use this method"
|
||||
msgstr "Devi essere autenticato per usare questo metodo"
|
||||
|
||||
#: advancedcontentfilter.php:316 advancedcontentfilter.php:350
|
||||
#: advancedcontentfilter.php:379
|
||||
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
|
||||
#: advancedcontentfilter.php:418
|
||||
msgid "Invalid form security token, please refresh the page."
|
||||
msgstr "Token di sicurezza invalido, aggiorna la pagina."
|
||||
|
||||
#: advancedcontentfilter.php:328
|
||||
#: advancedcontentfilter.php:363
|
||||
msgid "The rule name and expression are required."
|
||||
msgstr "Il nome e l'espressione della regola sono richiesti."
|
||||
|
||||
#: advancedcontentfilter.php:340
|
||||
#: advancedcontentfilter.php:377
|
||||
msgid "Rule successfully added"
|
||||
msgstr "Regola aggiunta con successo"
|
||||
|
||||
#: advancedcontentfilter.php:354 advancedcontentfilter.php:383
|
||||
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
|
||||
msgid "Rule doesn't exist or doesn't belong to you."
|
||||
msgstr "La regola non esiste o non ti appartiene."
|
||||
|
||||
#: advancedcontentfilter.php:369
|
||||
#: advancedcontentfilter.php:408
|
||||
msgid "Rule successfully updated"
|
||||
msgstr "Regola aggiornata con successo"
|
||||
|
||||
#: advancedcontentfilter.php:390
|
||||
#: advancedcontentfilter.php:431
|
||||
msgid "Rule successfully deleted"
|
||||
msgstr "Regola eliminata con successo"
|
||||
|
||||
#: advancedcontentfilter.php:400
|
||||
#: advancedcontentfilter.php:441
|
||||
msgid "Missing argument: guid."
|
||||
msgstr "Argomento mancante: guid."
|
||||
|
||||
#: advancedcontentfilter.php:406
|
||||
#: advancedcontentfilter.php:449
|
||||
#, php-format
|
||||
msgid "Unknown post with guid: %s"
|
||||
msgstr "Messaggio con guid %s sconosciuto"
|
||||
|
||||
#: src/middlewares.php:28
|
||||
#: src/middlewares.php:49
|
||||
msgid "Method not found"
|
||||
msgstr "Metodo non trovato"
|
||||
|
|
|
|||
|
|
@ -3,14 +3,14 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Filtered by rule: %s'] = 'Filtrato dalla regola: %s';
|
||||
$a->strings['Advanced Content Filter'] = 'Filtro Avanzato Contenuti';
|
||||
$a->strings['Back to Addon Settings'] = 'Torna alle impostazioni del componente aggiuntivo';
|
||||
$a->strings['Add a Rule'] = 'Aggiungi una regola';
|
||||
$a->strings['Help'] = 'Aiuto';
|
||||
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the <a href="advancedcontentfilter/help">help page</a>.'] = 'Aggiungi e gestisci le tue regole personali di filtro contenuti in questa schermata. Le regole hanno un nome e un\'espressione arbitraria che sarà confrontata con i dati del messaggio. Per un elenco completo delle operazioni disponibili, controlla la <a href="advancedcontentfilter/help">pagina di aiuto</a>.';
|
||||
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Aggiungi e gestisci le tue regole personali di filtro contenuti in questa schermata. Le regole hanno un nome e un\'espressione arbitraria che sarà confrontata con i dati del messaggio. Per un elenco completo delle operazioni e variabili disponibili, controlla la pagina di aiuto.';
|
||||
$a->strings['Your rules'] = 'Le tue regole';
|
||||
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Non hai ancora nessuna regola! Aggiungine una cliccando sul bottone qui sopra a fianco al titolo.';
|
||||
$a->strings['Disabled'] = 'Disabilitato';
|
||||
|
|
@ -26,7 +26,6 @@ $a->strings['Close'] = 'Chiudi';
|
|||
$a->strings['Add new rule'] = 'Aggiungi nuova regola';
|
||||
$a->strings['Rule Name'] = 'Nome Regola';
|
||||
$a->strings['Rule Expression'] = 'Espressione Regola';
|
||||
$a->strings['<p>Examples:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>'] = '<p>Esempi:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>';
|
||||
$a->strings['Cancel'] = 'Annulla';
|
||||
$a->strings['You must be logged in to use this method'] = 'Devi essere autenticato per usare questo metodo';
|
||||
$a->strings['Invalid form security token, please refresh the page.'] = 'Token di sicurezza invalido, aggiorna la pagina.';
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ function birdavatar_addon_settings_post(&$s)
|
|||
}
|
||||
|
||||
if (!empty($_POST['birdavatar-usebird'])) {
|
||||
$url = DI::baseUrl()->get() . '/birdavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time();
|
||||
$url = DI::baseUrl() . '/birdavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time();
|
||||
|
||||
$self = DBA::selectFirst('contact', ['id'], ['uid' => DI::userSession()->getLocalUserId(), 'self' => true]);
|
||||
if (!DBA::isResult($self)) {
|
||||
|
|
@ -120,9 +120,9 @@ function birdavatar_lookup(array &$b)
|
|||
{
|
||||
$user = DBA::selectFirst('user', ['uid'], ['email' => $b['email']]);
|
||||
if (DBA::isResult($user)) {
|
||||
$url = DI::baseUrl()->get() . '/birdavatar/' . $user['uid'];
|
||||
$url = DI::baseUrl() . '/birdavatar/' . $user['uid'];
|
||||
} else {
|
||||
$url = DI::baseUrl()->get() . '/birdavatar/' . md5(trim(strtolower($b['email'])));
|
||||
$url = DI::baseUrl() . '/birdavatar/' . md5(trim(strtolower($b['email'])));
|
||||
}
|
||||
|
||||
switch ($b['size']) {
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-05-23 19:26+0000\n"
|
||||
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:19+0000\n"
|
||||
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -8,9 +8,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
use Friendica\App;
|
||||
use Friendica\Core\Hook;
|
||||
use Friendica\Core\System;
|
||||
use Friendica\DI;
|
||||
use Jaybizzle\CrawlerDetect\CrawlerDetect;
|
||||
use Friendica\Core\Logger;
|
||||
|
|
@ -52,12 +50,15 @@ function blockbot_init_1()
|
|||
$logdata = ['agent' => $_SERVER['HTTP_USER_AGENT'], 'uri' => $_SERVER['REQUEST_URI']];
|
||||
|
||||
// List of "good" crawlers
|
||||
$good_agents = ['fediverse.space crawler', 'fediverse.network crawler', 'Active_Pods_CheckBot_3.0',
|
||||
$good_agents = [
|
||||
'fediverse.space crawler', 'fediverse.network crawler', 'Active_Pods_CheckBot_3.0',
|
||||
'Social-Relay/', 'Test Certificate Info', 'Uptimebot/', 'GNUSocialBot', 'UptimeRobot/',
|
||||
'PTST/', 'Zabbix', 'Poduptime/'];
|
||||
'PTST/', 'Zabbix', 'Poduptime/'
|
||||
];
|
||||
|
||||
// List of known crawlers.
|
||||
$agents = ['SemrushBot', 's~feedly-nikon3', 'Qwantify/Bleriot/', 'ltx71', 'Sogou web spider/',
|
||||
$agents = [
|
||||
'SemrushBot', 's~feedly-nikon3', 'Qwantify/Bleriot/', 'ltx71', 'Sogou web spider/',
|
||||
'Diffbot/', 'Twitterbot/', 'YisouSpider', 'evc-batch/', 'LivelapBot/', 'TrendsmapResolver/',
|
||||
'PaperLiBot/', 'Nuzzel', 'um-LN/', 'Google Favicon', 'Datanyze', 'BLEXBot/', '360Spider',
|
||||
'adscanner/', 'HeadlessChrome', 'wpif', 'startmebot/', 'Googlebot/', 'Applebot/',
|
||||
|
|
@ -79,7 +80,8 @@ function blockbot_init_1()
|
|||
'Google-Apps-Script; beanserver;', 'woorankreview/', 'Seekport Crawler;', 'AHC/',
|
||||
'SkypeUriPreview Preview/', 'Semanticbot/', 'Embed PHP library', 'XoviOnpageCrawler;',
|
||||
'GetHPinfo.com-Bot/', 'BoardReader Favicon Fetcher', 'Google-Adwords-Instant', 'newspaper/',
|
||||
'YurichevBot/', 'Crawling at Home Project', 'InfoTigerBot/'];
|
||||
'YurichevBot/', 'Crawling at Home Project', 'InfoTigerBot/'
|
||||
];
|
||||
|
||||
if (!DI::config()->get('blockbot', 'good_crawlers')) {
|
||||
$agents = array_merge($agents, $good_agents);
|
||||
|
|
@ -114,7 +116,8 @@ function blockbot_init_1()
|
|||
}
|
||||
|
||||
// List of false positives' strings of known "good" agents.
|
||||
$agents = ['curl', 'zgrab', 'Go-http-client', 'curb', 'github.com', 'reqwest', 'Feedly/',
|
||||
$agents = [
|
||||
'curl', 'zgrab', 'Go-http-client', 'curb', 'github.com', 'reqwest', 'Feedly/',
|
||||
'Python-urllib/', 'Liferea/', 'aiohttp/', 'WordPress.com Reader', 'hackney/',
|
||||
'Faraday v', 'okhttp', 'UniversalFeedParser', 'PixelFedBot', 'python-requests',
|
||||
'WordPress/', 'http.rb/', 'Apache-HttpClient/', 'WordPress.com;', 'Pleroma',
|
||||
|
|
@ -122,7 +125,8 @@ function blockbot_init_1()
|
|||
'lua-resty-http/', 'Tiny Tiny RSS/', 'Wget/', 'PostmanRuntime/',
|
||||
'W3C_Validator/', 'NetNewsWire', 'FeedValidator/', 'theoldreader.com', 'axios/',
|
||||
'Paw/', 'PeerTube/', 'fedi.inex.dev', 'FediDB/', 'index.community crawler',
|
||||
'Slackbot-LinkExpanding'];
|
||||
'Slackbot-LinkExpanding'
|
||||
];
|
||||
|
||||
if (DI::config()->get('blockbot', 'good_crawlers')) {
|
||||
$agents = array_merge($agents, $good_agents);
|
||||
|
|
@ -130,11 +134,11 @@ function blockbot_init_1()
|
|||
|
||||
foreach ($agents as $agent) {
|
||||
if (stristr($_SERVER['HTTP_USER_AGENT'], $agent)) {
|
||||
logger::notice('False positive', $logdata);
|
||||
logger::info('False positive', $logdata);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
logger::info('Blocked bot', $logdata);
|
||||
logger::notice('Blocked bot', $logdata);
|
||||
throw new ForbiddenException('Bots are not allowed');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ function blockem_prepare_body_content_filter(array &$hook_data)
|
|||
function blockem_display_item(array &$b = null)
|
||||
{
|
||||
if (!empty($b['output']['body']) && strstr($b['output']['body'], 'id="blockem-wrap-')) {
|
||||
$b['output']['thumb'] = DI::baseUrl()->get() . "/images/person-80.jpg";
|
||||
$b['output']['thumb'] = DI::baseUrl() . "/images/person-80.jpg";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,21 +4,21 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014
|
||||
# michal_s <msupler@gmail.com>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
|
||||
"PO-Revision-Date: 2014-07-07 18:27+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:27+0000\n"
|
||||
"Last-Translator: michal_s <msupler@gmail.com>, 2014\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: buglink.php:15
|
||||
#: buglink.php:20
|
||||
msgid "Report Bug"
|
||||
msgstr "Nahlásit chybu"
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Report Bug'] = 'Nahlásit chybu';
|
||||
|
|
|
|||
|
|
@ -10,16 +10,16 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
|
||||
"PO-Revision-Date: 2019-11-10 20:12+0000\n"
|
||||
"Last-Translator: René Wagner <apollo@rw-net.de>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:27+0000\n"
|
||||
"Last-Translator: René Wagner <apollo@rw-net.de>, 2019\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: de\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: buglink.php:15
|
||||
#: buglink.php:20
|
||||
msgid "Report Bug"
|
||||
msgstr "Fehler melden"
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ function catavatar_addon_settings_post(&$s)
|
|||
}
|
||||
|
||||
if (!empty($_POST['catavatar-usecat'])) {
|
||||
$url = DI::baseUrl()->get() . '/catavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time();
|
||||
$url = DI::baseUrl() . '/catavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time();
|
||||
|
||||
$self = DBA::selectFirst('contact', ['id'], ['uid' => DI::userSession()->getLocalUserId(), 'self' => true]);
|
||||
if (!DBA::isResult($self)) {
|
||||
|
|
@ -121,9 +121,9 @@ function catavatar_lookup(array &$b)
|
|||
{
|
||||
$user = DBA::selectFirst('user', ['uid'], ['email' => $b['email']]);
|
||||
if (DBA::isResult($user)) {
|
||||
$url = DI::baseUrl()->get() . '/catavatar/' . $user['uid'];
|
||||
$url = DI::baseUrl() . '/catavatar/' . $user['uid'];
|
||||
} else {
|
||||
$url = DI::baseUrl()->get() . '/catavatar/' . md5(trim(strtolower($b['email'])));
|
||||
$url = DI::baseUrl() . '/catavatar/' . md5(trim(strtolower($b['email'])));
|
||||
}
|
||||
|
||||
switch($b['size']) {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ msgstr ""
|
|||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2018-04-07 05:23+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2022\n"
|
||||
"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
# Translators:
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2019
|
||||
# Ulf Rompe <transifex.com@rompe.org>, 2019
|
||||
# foss <foss@openmailbox.org>, 2020
|
||||
# foss <oss@disr.it>, 2020
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
|
|
@ -15,8 +15,8 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2019-01-23 16:01+0000\n"
|
||||
"Last-Translator: foss <foss@openmailbox.org>, 2020\n"
|
||||
"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"Last-Translator: foss <oss@disr.it>, 2020\n"
|
||||
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ function curweather_network_mod_init(string &$body)
|
|||
return;
|
||||
}
|
||||
|
||||
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl()->get() . '/addon/curweather/curweather.css' . '" media="all" />' . "\r\n";
|
||||
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl() . '/addon/curweather/curweather.css' . '" media="all" />' . "\r\n";
|
||||
|
||||
// $rpt value is needed for location
|
||||
// $lang will be taken from the browser session to honour user settings
|
||||
|
|
|
|||
|
|
@ -11,124 +11,116 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-09-25 17:17+0200\n"
|
||||
"PO-Revision-Date: 2018-07-05 17:03+0000\n"
|
||||
"Last-Translator: Aditoo\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:34+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: curweather.php:31
|
||||
msgid "Error fetching weather data.\\nError was: "
|
||||
msgstr "Chyba při získávání dat o počasí.\\nChyba:"
|
||||
#: curweather.php:47
|
||||
msgid "Error fetching weather data. Error was: "
|
||||
msgstr ""
|
||||
|
||||
#: curweather.php:111 curweather.php:172
|
||||
#: curweather.php:130
|
||||
msgid "Current Weather"
|
||||
msgstr "Aktuální počasí"
|
||||
|
||||
#: curweather.php:118
|
||||
#: curweather.php:137
|
||||
msgid "Relative Humidity"
|
||||
msgstr "Relativní vlhkost vzduchu"
|
||||
|
||||
#: curweather.php:119
|
||||
#: curweather.php:138
|
||||
msgid "Pressure"
|
||||
msgstr "Tlak"
|
||||
|
||||
#: curweather.php:120
|
||||
#: curweather.php:139
|
||||
msgid "Wind"
|
||||
msgstr "Vítr"
|
||||
|
||||
#: curweather.php:121
|
||||
#: curweather.php:140
|
||||
msgid "Last Updated"
|
||||
msgstr "Naposledy aktualizováno"
|
||||
|
||||
#: curweather.php:122
|
||||
#: curweather.php:141
|
||||
msgid "Data by"
|
||||
msgstr "Data podle"
|
||||
|
||||
#: curweather.php:123
|
||||
#: curweather.php:142
|
||||
msgid "Show on map"
|
||||
msgstr "Ukázat na mapě"
|
||||
|
||||
#: curweather.php:128
|
||||
#: curweather.php:147
|
||||
msgid "There was a problem accessing the weather data. But have a look"
|
||||
msgstr "Při získávání dat o počasí nastala chyba. Podívejte se ale"
|
||||
|
||||
#: curweather.php:130
|
||||
#: curweather.php:149
|
||||
msgid "at OpenWeatherMap"
|
||||
msgstr "na OpenWeatherMap"
|
||||
|
||||
#: curweather.php:146
|
||||
msgid "Current Weather settings updated."
|
||||
msgstr "Nastavení pro Aktuální počasí aktualizováno."
|
||||
|
||||
#: curweather.php:161
|
||||
#: curweather.php:178
|
||||
msgid "No APPID found, please contact your admin to obtain one."
|
||||
msgstr "Žádné APPID nebylo nalezeno, prosím kontaktujte svého administrátora pro získání APPID."
|
||||
|
||||
#: curweather.php:171 curweather.php:200
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit nastavení"
|
||||
|
||||
#: curweather.php:172
|
||||
msgid "Settings"
|
||||
msgstr "Nastavení"
|
||||
|
||||
#: curweather.php:174
|
||||
#: curweather.php:188
|
||||
msgid "Enter either the name of your location or the zip code."
|
||||
msgstr "Zadejte buď název místa, kde se nacházíte, nebo PSČ."
|
||||
|
||||
#: curweather.php:175
|
||||
#: curweather.php:189
|
||||
msgid "Your Location"
|
||||
msgstr "Vaše poloha"
|
||||
|
||||
#: curweather.php:175
|
||||
#: curweather.php:189
|
||||
msgid ""
|
||||
"Identifier of your location (name or zip code), e.g. <em>Berlin,DE</em> or "
|
||||
"<em>14476,DE</em>."
|
||||
msgstr "Identifikátor vaší polohy (název nebo PSČ), např. <em>Praha,CZ</em> nebo <em>11000,CZ</em>."
|
||||
|
||||
#: curweather.php:176
|
||||
#: curweather.php:190
|
||||
msgid "Units"
|
||||
msgstr "Jednotky"
|
||||
|
||||
#: curweather.php:176
|
||||
#: curweather.php:190
|
||||
msgid "select if the temperature should be displayed in °C or °F"
|
||||
msgstr "vyberte, jestli by se teplota měla zobrazovat v °C či °F"
|
||||
|
||||
#: curweather.php:177
|
||||
#: curweather.php:191
|
||||
msgid "Show weather data"
|
||||
msgstr "Ukázat data o počasí"
|
||||
|
||||
#: curweather.php:190
|
||||
msgid "Curweather settings saved."
|
||||
msgstr "Nastavení Curwather uložena."
|
||||
#: curweather.php:196
|
||||
msgid "Current Weather Settings"
|
||||
msgstr ""
|
||||
|
||||
#: curweather.php:201
|
||||
#: curweather.php:227
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit nastavení"
|
||||
|
||||
#: curweather.php:230
|
||||
msgid "Caching Interval"
|
||||
msgstr "Ukládám interval do mezipaměti"
|
||||
msgstr "Interval mezipaměti"
|
||||
|
||||
#: curweather.php:201
|
||||
#: curweather.php:232
|
||||
msgid ""
|
||||
"For how long should the weather data be cached? Choose according your "
|
||||
"OpenWeatherMap account type."
|
||||
msgstr "Na jak dlouho by vaše data o počasí měla být uložena v mezipaměti? Vyberte podle typu vašeho účtu na OpenWeatherMap."
|
||||
|
||||
#: curweather.php:201
|
||||
#: curweather.php:233
|
||||
msgid "no cache"
|
||||
msgstr "žádná mezipaměť"
|
||||
|
||||
#: curweather.php:201
|
||||
#: curweather.php:234 curweather.php:235 curweather.php:236 curweather.php:237
|
||||
msgid "minutes"
|
||||
msgstr "minut"
|
||||
|
||||
#: curweather.php:202
|
||||
#: curweather.php:240
|
||||
msgid "Your APPID"
|
||||
msgstr "Vaše APPID"
|
||||
|
||||
#: curweather.php:202
|
||||
#: curweather.php:240
|
||||
msgid "Your API key provided by OpenWeatherMap"
|
||||
msgstr "Váš API klíč poskytnutý OpenWetherMap"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ function string_plural_select_cs($n){
|
|||
$n = intval($n);
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Error fetching weather data.\nError was: '] = 'Chyba při získávání dat o počasí.\nChyba:';
|
||||
$a->strings['Current Weather'] = 'Aktuální počasí';
|
||||
$a->strings['Relative Humidity'] = 'Relativní vlhkost vzduchu';
|
||||
$a->strings['Pressure'] = 'Tlak';
|
||||
|
|
@ -15,18 +14,15 @@ $a->strings['Data by'] = 'Data podle';
|
|||
$a->strings['Show on map'] = 'Ukázat na mapě';
|
||||
$a->strings['There was a problem accessing the weather data. But have a look'] = 'Při získávání dat o počasí nastala chyba. Podívejte se ale';
|
||||
$a->strings['at OpenWeatherMap'] = 'na OpenWeatherMap';
|
||||
$a->strings['Current Weather settings updated.'] = 'Nastavení pro Aktuální počasí aktualizováno.';
|
||||
$a->strings['No APPID found, please contact your admin to obtain one.'] = 'Žádné APPID nebylo nalezeno, prosím kontaktujte svého administrátora pro získání APPID.';
|
||||
$a->strings['Save Settings'] = 'Uložit nastavení';
|
||||
$a->strings['Settings'] = 'Nastavení';
|
||||
$a->strings['Enter either the name of your location or the zip code.'] = 'Zadejte buď název místa, kde se nacházíte, nebo PSČ.';
|
||||
$a->strings['Your Location'] = 'Vaše poloha';
|
||||
$a->strings['Identifier of your location (name or zip code), e.g. <em>Berlin,DE</em> or <em>14476,DE</em>.'] = 'Identifikátor vaší polohy (název nebo PSČ), např. <em>Praha,CZ</em> nebo <em>11000,CZ</em>.';
|
||||
$a->strings['Units'] = 'Jednotky';
|
||||
$a->strings['select if the temperature should be displayed in °C or °F'] = 'vyberte, jestli by se teplota měla zobrazovat v °C či °F';
|
||||
$a->strings['Show weather data'] = 'Ukázat data o počasí';
|
||||
$a->strings['Curweather settings saved.'] = 'Nastavení Curwather uložena.';
|
||||
$a->strings['Caching Interval'] = 'Ukládám interval do mezipaměti';
|
||||
$a->strings['Save Settings'] = 'Uložit nastavení';
|
||||
$a->strings['Caching Interval'] = 'Interval mezipaměti';
|
||||
$a->strings['For how long should the weather data be cached? Choose according your OpenWeatherMap account type.'] = 'Na jak dlouho by vaše data o počasí měla být uložena v mezipaměti? Vyberte podle typu vašeho účtu na OpenWeatherMap.';
|
||||
$a->strings['no cache'] = 'žádná mezipaměť';
|
||||
$a->strings['minutes'] = 'minut';
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2022-01-22 17:28+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:34+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2016,2021-2022\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ function diaspora_post_local(array &$b)
|
|||
|
||||
function diaspora_send(array &$b)
|
||||
{
|
||||
$hostname = DI::baseUrl()->getHostname();
|
||||
$hostname = DI::baseUrl()->getHost();
|
||||
|
||||
Logger::notice('diaspora_send: invoked');
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# foss <foss@openmailbox.org>, 2020
|
||||
# foss <oss@disr.it>, 2020
|
||||
# Till Mohr <tmtrfx@till-mohr.de>, 2021
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2020
|
||||
|
|
@ -14,9 +14,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 15:27+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:39+0000\n"
|
||||
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -10,40 +10,36 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2018-06-14 10:13+0000\n"
|
||||
"Last-Translator: Aditoo\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:41+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: dwpost.php:39
|
||||
#: dwpost.php:43
|
||||
msgid "Post to Dreamwidth"
|
||||
msgstr "Poslat na Dreamwidth"
|
||||
msgstr "Odeslat na Dreamwidth"
|
||||
|
||||
#: dwpost.php:70
|
||||
msgid "Dreamwidth Post Settings"
|
||||
msgstr "Nastavení Dreamwidth Post"
|
||||
#: dwpost.php:63
|
||||
msgid "Enable Dreamwidth Post Addon"
|
||||
msgstr ""
|
||||
|
||||
#: dwpost.php:72
|
||||
msgid "Enable dreamwidth Post Addon"
|
||||
msgstr "Povolit doplněk Dreamwidth Post"
|
||||
#: dwpost.php:64
|
||||
msgid "Dreamwidth username"
|
||||
msgstr ""
|
||||
|
||||
#: dwpost.php:77
|
||||
msgid "dreamwidth username"
|
||||
msgstr "dreamwidth uživatelské jméno"
|
||||
#: dwpost.php:65
|
||||
msgid "Dreamwidth password"
|
||||
msgstr ""
|
||||
|
||||
#: dwpost.php:82
|
||||
msgid "dreamwidth password"
|
||||
msgstr "dreamwidth heslo"
|
||||
#: dwpost.php:66
|
||||
msgid "Post to Dreamwidth by default"
|
||||
msgstr ""
|
||||
|
||||
#: dwpost.php:87
|
||||
msgid "Post to dreamwidth by default"
|
||||
msgstr "Ve výchozím stavu posílat na dreamwidth"
|
||||
|
||||
#: dwpost.php:93
|
||||
msgid "Submit"
|
||||
msgstr "Odeslat"
|
||||
#: dwpost.php:71
|
||||
msgid "Dreamwidth Export"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -5,10 +5,4 @@ function string_plural_select_cs($n){
|
|||
$n = intval($n);
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Post to Dreamwidth'] = 'Poslat na Dreamwidth';
|
||||
$a->strings['Dreamwidth Post Settings'] = 'Nastavení Dreamwidth Post';
|
||||
$a->strings['Enable dreamwidth Post Addon'] = 'Povolit doplněk Dreamwidth Post';
|
||||
$a->strings['dreamwidth username'] = 'dreamwidth uživatelské jméno';
|
||||
$a->strings['dreamwidth password'] = 'dreamwidth heslo';
|
||||
$a->strings['Post to dreamwidth by default'] = 'Ve výchozím stavu posílat na dreamwidth';
|
||||
$a->strings['Submit'] = 'Odeslat';
|
||||
$a->strings['Post to Dreamwidth'] = 'Odeslat na Dreamwidth';
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2022-01-22 17:33+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:41+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021-2022\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-06 16:55+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-22 12:31+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 15:15+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-22 12:33+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2019\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 17:23+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:27+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 15:27+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:30+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -4,72 +4,69 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014-2015
|
||||
# Aditoo, 2018
|
||||
# michal_s <msupler@gmail.com>, 2014-2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2015-02-11 19:41+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:33+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: gravatar.php:71
|
||||
#: gravatar.php:78
|
||||
msgid "generic profile image"
|
||||
msgstr "generický profilový obrázek"
|
||||
|
||||
#: gravatar.php:72
|
||||
#: gravatar.php:79
|
||||
msgid "random geometric pattern"
|
||||
msgstr "náhodný geometrický vzor"
|
||||
|
||||
#: gravatar.php:73
|
||||
#: gravatar.php:80
|
||||
msgid "monster face"
|
||||
msgstr "tvář příšery"
|
||||
|
||||
#: gravatar.php:74
|
||||
#: gravatar.php:81
|
||||
msgid "computer generated face"
|
||||
msgstr "počítačově generovaná tvář"
|
||||
|
||||
#: gravatar.php:75
|
||||
#: gravatar.php:82
|
||||
msgid "retro arcade style face"
|
||||
msgstr "tvář v retro arkádovém stylu"
|
||||
|
||||
#: gravatar.php:89
|
||||
#: gravatar.php:96
|
||||
msgid "Information"
|
||||
msgstr "Informace"
|
||||
|
||||
#: gravatar.php:89
|
||||
#: gravatar.php:96
|
||||
msgid ""
|
||||
"Libravatar addon is installed, too. Please disable Libravatar addon or this "
|
||||
"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if "
|
||||
"nothing was found at Libravatar."
|
||||
msgstr "Libravatar doplněk je také nainstalován. Prosím zakažte doplněk Libravatar nebo tento doplněk Gravatar.<br>Libravatar doplněk se vrátí k doplňku Gravatar, pokud na Libravataru nebude nic nalezeno."
|
||||
msgstr "Doplněk Libravatar je také nainstalován. Prosím zakažte doplněk Libravatar nebo tento doplněk Gravatar.<br>Doplněk Libravatar se přepne na Gravatar, pokud na Libravataru nebude nic nalezeno."
|
||||
|
||||
#: gravatar.php:95
|
||||
msgid "Submit"
|
||||
msgstr "Odeslat"
|
||||
#: gravatar.php:102
|
||||
msgid "Save Settings"
|
||||
msgstr ""
|
||||
|
||||
#: gravatar.php:96
|
||||
#: gravatar.php:103
|
||||
msgid "Default avatar image"
|
||||
msgstr "Defaultní obrázek avataru"
|
||||
msgstr "Výchozí avatarový obrázek"
|
||||
|
||||
#: gravatar.php:96
|
||||
#: gravatar.php:103
|
||||
msgid "Select default avatar image if none was found at Gravatar. See README"
|
||||
msgstr "Nastavte defaulní obrázek avatara pokud ho již nemáte na Gravatar. Více viz. soubor README."
|
||||
msgstr "Nastavte výchozí avatarový obrázek, pokud ho již nemáte na Gravataru. Více viz. soubor README."
|
||||
|
||||
#: gravatar.php:97
|
||||
#: gravatar.php:104
|
||||
msgid "Rating of images"
|
||||
msgstr "Hodnocení obrázků"
|
||||
|
||||
#: gravatar.php:97
|
||||
#: gravatar.php:104
|
||||
msgid "Select the appropriate avatar rating for your site. See README"
|
||||
msgstr "Zadejte ohodnocení příslušného avatara pro vaši stránku. Viz README."
|
||||
|
||||
#: gravatar.php:111
|
||||
msgid "Gravatar settings updated."
|
||||
msgstr "Nastavení Gravatar aktualizováno."
|
||||
msgstr "Zadejte příslušné ohodnocení avataru pro vaši stránku. Viz README."
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['generic profile image'] = 'generický profilový obrázek';
|
||||
$a->strings['random geometric pattern'] = 'náhodný geometrický vzor';
|
||||
|
|
@ -11,10 +11,8 @@ $a->strings['monster face'] = 'tvář příšery';
|
|||
$a->strings['computer generated face'] = 'počítačově generovaná tvář';
|
||||
$a->strings['retro arcade style face'] = 'tvář v retro arkádovém stylu';
|
||||
$a->strings['Information'] = 'Informace';
|
||||
$a->strings['Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.'] = 'Libravatar doplněk je také nainstalován. Prosím zakažte doplněk Libravatar nebo tento doplněk Gravatar.<br>Libravatar doplněk se vrátí k doplňku Gravatar, pokud na Libravataru nebude nic nalezeno.';
|
||||
$a->strings['Submit'] = 'Odeslat';
|
||||
$a->strings['Default avatar image'] = 'Defaultní obrázek avataru';
|
||||
$a->strings['Select default avatar image if none was found at Gravatar. See README'] = 'Nastavte defaulní obrázek avatara pokud ho již nemáte na Gravatar. Více viz. soubor README.';
|
||||
$a->strings['Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.'] = 'Doplněk Libravatar je také nainstalován. Prosím zakažte doplněk Libravatar nebo tento doplněk Gravatar.<br>Doplněk Libravatar se přepne na Gravatar, pokud na Libravataru nebude nic nalezeno.';
|
||||
$a->strings['Default avatar image'] = 'Výchozí avatarový obrázek';
|
||||
$a->strings['Select default avatar image if none was found at Gravatar. See README'] = 'Nastavte výchozí avatarový obrázek, pokud ho již nemáte na Gravataru. Více viz. soubor README.';
|
||||
$a->strings['Rating of images'] = 'Hodnocení obrázků';
|
||||
$a->strings['Select the appropriate avatar rating for your site. See README'] = 'Zadejte ohodnocení příslušného avatara pro vaši stránku. Viz README.';
|
||||
$a->strings['Gravatar settings updated.'] = 'Nastavení Gravatar aktualizováno.';
|
||||
$a->strings['Select the appropriate avatar rating for your site. See README'] = 'Zadejte příslušné ohodnocení avataru pro vaši stránku. Viz README.';
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-06 17:01+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:33+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 15:27+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:35+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ function ifttt_settings(array &$data)
|
|||
'new_photo_upload_body' => DI::l10n()->t('Body for "new photo upload"'),
|
||||
'new_link_post_body' => DI::l10n()->t('Body for "new link post"'),
|
||||
],
|
||||
'$url' => DI::baseUrl()->get() . '/ifttt/' . DI::userSession()->getLocalUserNickname(),
|
||||
'$url' => DI::baseUrl() . '/ifttt/' . DI::userSession()->getLocalUserNickname(),
|
||||
'$new_status_message_body' => 'key=' . $key . '&type=status&msg=<<<{{Message}}>>>&date=<<<{{UpdatedAt}}>>>&url=<<<{{PageUrl}}>>>',
|
||||
'$new_photo_upload_body' => 'key=' . $key . '&type=photo&link=<<<{{Link}}>>>&image=<<<{{ImageSource}}>>>&msg=<<<{{Caption}}>>>&date=<<<{{CreatedAt}}>>>&url=<<<{{PageUrl}}>>>',
|
||||
'$new_link_post_body' => 'key=' . $key . '&type=link&link=<<<{{Link}}>>>&title=<<<{{Title}}>>>&msg=<<<{{Message}}>>>&description=<<<{{Description}}>>>&date=<<<{{CreatedAt}}>>>&url=<<<{{PageUrl}}>>>',
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ msgstr ""
|
|||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2017-11-27 10:37+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2022\n"
|
||||
"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 16:19+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:37+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ function impressum_footer(string &$body)
|
|||
$text = ProxyUtils::proxifyHtml(BBCode::convert(DI::config()->get('impressum', 'footer_text')));
|
||||
|
||||
if ($text != '') {
|
||||
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl()->get() . '/addon/impressum/impressum.css" media="all" />';
|
||||
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl() . '/addon/impressum/impressum.css" media="all" />';
|
||||
$body .= '<div class="clear"></div>';
|
||||
$body .= '<div id="impressum_footer">' . $text . '</div>';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-03-29 05:29+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:39+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -30,13 +30,12 @@ function infiniteimprobabilitydrive_module() {}
|
|||
|
||||
function infiniteimprobabilitydrive_content()
|
||||
{
|
||||
$baseurl = DI::baseUrl()->get() . '/addon/infiniteimprobabilitydrive';
|
||||
$o = '';
|
||||
|
||||
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="'.DI::baseUrl()->get().'/addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.css"/>';
|
||||
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="'.DI::baseUrl().'/addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.css"/>';
|
||||
|
||||
|
||||
$baseurl = DI::baseUrl()->get();
|
||||
$baseurl = (string)DI::baseUrl();
|
||||
|
||||
$o .= <<< EOT
|
||||
|
||||
|
|
|
|||
|
|
@ -4,21 +4,21 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014
|
||||
# michal_s <msupler@gmail.com>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
|
||||
"PO-Revision-Date: 2014-07-07 19:12+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
|
||||
"Last-Translator: michal_s <msupler@gmail.com>, 2014\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: infiniteimprobabilitydrive.php:19
|
||||
#: infiniteimprobabilitydrive.php:18
|
||||
msgid "Infinite Improbability Drive"
|
||||
msgstr "Infinite Improbability Drive"
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Infinite Improbability Drive'] = 'Infinite Improbability Drive';
|
||||
|
|
|
|||
|
|
@ -4,21 +4,21 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# bavatar <tobias.diekershoff@gmx.net>, 2014
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
|
||||
"PO-Revision-Date: 2014-07-06 12:15+0000\n"
|
||||
"Last-Translator: bavatar <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: de\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: infiniteimprobabilitydrive.php:19
|
||||
#: infiniteimprobabilitydrive.php:18
|
||||
msgid "Infinite Improbability Drive"
|
||||
msgstr "Infinite Improbability Drive"
|
||||
|
|
|
|||
|
|
@ -9,16 +9,16 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2017-09-20 06:08+0000\n"
|
||||
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
|
||||
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>, 2014\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: infiniteimprobabilitydrive.php:19
|
||||
#: infiniteimprobabilitydrive.php:18
|
||||
msgid "Infinite Improbability Drive"
|
||||
msgstr "Motore ad Improbabilità Infinita"
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Infinite Improbability Drive'] = 'Motore ad Improbabilità Infinita';
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ function irc_module() {}
|
|||
|
||||
function irc_content()
|
||||
{
|
||||
$baseurl = DI::baseUrl()->get() . '/addon/irc';
|
||||
$baseurl = DI::baseUrl() . '/addon/irc';
|
||||
$o = '';
|
||||
|
||||
/* set the list of popular channels */
|
||||
|
|
@ -95,7 +95,7 @@ function irc_content()
|
|||
|
||||
DI::page()['aside'] .= '<div class="widget"><h3>' . DI::l10n()->t('Popular Channels') . '</h3><ul>';
|
||||
foreach ($chats as $chat) {
|
||||
DI::page()['aside'] .= '<li><a href="' . DI::baseUrl()->get() . '/irc?channels=' . $chat . '" >' . '#' . $chat . '</a></li>';
|
||||
DI::page()['aside'] .= '<li><a href="' . DI::baseUrl() . '/irc?channels=' . $chat . '" >' . '#' . $chat . '</a></li>';
|
||||
}
|
||||
DI::page()['aside'] .= '</ul></div>';
|
||||
|
||||
|
|
|
|||
|
|
@ -11,59 +11,55 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-07-08 13:17+0200\n"
|
||||
"PO-Revision-Date: 2018-06-14 14:36+0000\n"
|
||||
"Last-Translator: Aditoo\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: irc.php:37
|
||||
msgid "IRC Settings"
|
||||
msgstr "Nastavení IRC"
|
||||
|
||||
#: irc.php:38
|
||||
#: irc.php:32
|
||||
msgid ""
|
||||
"Here you can change the system wide settings for the channels to "
|
||||
"automatically join and access via the side bar. Note the changes you do "
|
||||
"here, only effect the channel selection if you are logged in."
|
||||
msgstr ""
|
||||
msgstr "Zde můžete změnit systémová nastavení pro kanály pro automatické spojení a přístup přes postranní lištu. Mějte na paměti, že změny, které zde provedete, ovlivní výběr kanálů pouze, pokud jste přihlášen/a."
|
||||
|
||||
#: irc.php:39 irc.php:136
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit nastavení"
|
||||
|
||||
#: irc.php:40 irc.php:137
|
||||
#: irc.php:33 irc.php:133
|
||||
msgid "Channel(s) to auto connect (comma separated)"
|
||||
msgstr "Kanál(y) pro automatické připojení (oddělené čárkami)"
|
||||
|
||||
#: irc.php:40 irc.php:137
|
||||
#: irc.php:33 irc.php:133
|
||||
msgid ""
|
||||
"List of channels that shall automatically connected to when the app is "
|
||||
"launched."
|
||||
msgstr "Seznam kanálů, které budou při spuštění aplikace automaticky připojeny."
|
||||
|
||||
#: irc.php:41 irc.php:138
|
||||
#: irc.php:34 irc.php:134
|
||||
msgid "Popular Channels (comma separated)"
|
||||
msgstr "Populární kanály (oddělené čárkami)"
|
||||
|
||||
#: irc.php:41 irc.php:138
|
||||
#: irc.php:34 irc.php:134
|
||||
msgid ""
|
||||
"List of popular channels, will be displayed at the side and hotlinked for "
|
||||
"easy joining."
|
||||
msgstr "Seznam populárních kanálů, bude zobrazen na straně a bude obsahovat odkazy pro snadné připojení."
|
||||
|
||||
#: irc.php:57 irc.php:128
|
||||
msgid "IRC settings saved."
|
||||
msgstr "IRC Nastavení uloženo."
|
||||
#: irc.php:39
|
||||
msgid "IRC Settings"
|
||||
msgstr "Nastavení IRC"
|
||||
|
||||
#: irc.php:62
|
||||
#: irc.php:60
|
||||
msgid "IRC Chatroom"
|
||||
msgstr "IRC Místnost"
|
||||
|
||||
#: irc.php:90
|
||||
#: irc.php:88
|
||||
msgid "Popular Channels"
|
||||
msgstr "Populární kanály"
|
||||
|
||||
#: irc.php:132
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit nastavení"
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ function string_plural_select_cs($n){
|
|||
$n = intval($n);
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['IRC Settings'] = 'Nastavení IRC';
|
||||
$a->strings['Save Settings'] = 'Uložit nastavení';
|
||||
$a->strings['Here you can change the system wide settings for the channels to automatically join and access via the side bar. Note the changes you do here, only effect the channel selection if you are logged in.'] = 'Zde můžete změnit systémová nastavení pro kanály pro automatické spojení a přístup přes postranní lištu. Mějte na paměti, že změny, které zde provedete, ovlivní výběr kanálů pouze, pokud jste přihlášen/a.';
|
||||
$a->strings['Channel(s) to auto connect (comma separated)'] = 'Kanál(y) pro automatické připojení (oddělené čárkami)';
|
||||
$a->strings['List of channels that shall automatically connected to when the app is launched.'] = 'Seznam kanálů, které budou při spuštění aplikace automaticky připojeny.';
|
||||
$a->strings['Popular Channels (comma separated)'] = 'Populární kanály (oddělené čárkami)';
|
||||
$a->strings['List of popular channels, will be displayed at the side and hotlinked for easy joining.'] = 'Seznam populárních kanálů, bude zobrazen na straně a bude obsahovat odkazy pro snadné připojení.';
|
||||
$a->strings['IRC settings saved.'] = 'IRC Nastavení uloženo.';
|
||||
$a->strings['IRC Settings'] = 'Nastavení IRC';
|
||||
$a->strings['IRC Chatroom'] = 'IRC Místnost';
|
||||
$a->strings['Popular Channels'] = 'Populární kanály';
|
||||
$a->strings['Save Settings'] = 'Uložit nastavení';
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2021-02-01 18:19+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
|
||||
"Last-Translator: Ulf Rompe <transifex.com@rompe.org>, 2019\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -10,59 +10,55 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-07-08 13:17+0200\n"
|
||||
"PO-Revision-Date: 2020-09-17 11:40+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:41+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2020\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: irc.php:37
|
||||
msgid "IRC Settings"
|
||||
msgstr "Impostazioni IRC"
|
||||
|
||||
#: irc.php:38
|
||||
#: irc.php:32
|
||||
msgid ""
|
||||
"Here you can change the system wide settings for the channels to "
|
||||
"automatically join and access via the side bar. Note the changes you do "
|
||||
"here, only effect the channel selection if you are logged in."
|
||||
msgstr "Qui puoi modificare le impostazioni globali di sistema per i canali a cui accedere automaticamente attraverso la barra laterale. Nota che le modifiche che effetti qui hanno effetto sulla selezione di canali solo se sei loggato."
|
||||
|
||||
#: irc.php:39 irc.php:136
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: irc.php:40 irc.php:137
|
||||
#: irc.php:33 irc.php:133
|
||||
msgid "Channel(s) to auto connect (comma separated)"
|
||||
msgstr "Canale(i) a cui autocollegarsi (separati da virgola)"
|
||||
|
||||
#: irc.php:40 irc.php:137
|
||||
#: irc.php:33 irc.php:133
|
||||
msgid ""
|
||||
"List of channels that shall automatically connected to when the app is "
|
||||
"launched."
|
||||
msgstr "Lista di canali che a cui connettersi automaticamente quando l'app è avviata."
|
||||
|
||||
#: irc.php:41 irc.php:138
|
||||
#: irc.php:34 irc.php:134
|
||||
msgid "Popular Channels (comma separated)"
|
||||
msgstr "Canali popolari (separati da virgola)"
|
||||
|
||||
#: irc.php:41 irc.php:138
|
||||
#: irc.php:34 irc.php:134
|
||||
msgid ""
|
||||
"List of popular channels, will be displayed at the side and hotlinked for "
|
||||
"easy joining."
|
||||
msgstr "Lista di canali popolari: sarà visualizzata a lato e provvista di collegamento per facilitare l'adesione."
|
||||
|
||||
#: irc.php:57 irc.php:128
|
||||
msgid "IRC settings saved."
|
||||
msgstr "Impostazioni IRC salvate."
|
||||
#: irc.php:39
|
||||
msgid "IRC Settings"
|
||||
msgstr "Impostazioni IRC"
|
||||
|
||||
#: irc.php:62
|
||||
#: irc.php:60
|
||||
msgid "IRC Chatroom"
|
||||
msgstr "Stanza IRC"
|
||||
|
||||
#: irc.php:90
|
||||
#: irc.php:88
|
||||
msgid "Popular Channels"
|
||||
msgstr "Canali Popolari"
|
||||
|
||||
#: irc.php:132
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
|
|
|||
|
|
@ -3,15 +3,14 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['IRC Settings'] = 'Impostazioni IRC';
|
||||
$a->strings['Here you can change the system wide settings for the channels to automatically join and access via the side bar. Note the changes you do here, only effect the channel selection if you are logged in.'] = 'Qui puoi modificare le impostazioni globali di sistema per i canali a cui accedere automaticamente attraverso la barra laterale. Nota che le modifiche che effetti qui hanno effetto sulla selezione di canali solo se sei loggato.';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Channel(s) to auto connect (comma separated)'] = 'Canale(i) a cui autocollegarsi (separati da virgola)';
|
||||
$a->strings['List of channels that shall automatically connected to when the app is launched.'] = 'Lista di canali che a cui connettersi automaticamente quando l\'app è avviata.';
|
||||
$a->strings['Popular Channels (comma separated)'] = 'Canali popolari (separati da virgola)';
|
||||
$a->strings['List of popular channels, will be displayed at the side and hotlinked for easy joining.'] = 'Lista di canali popolari: sarà visualizzata a lato e provvista di collegamento per facilitare l\'adesione.';
|
||||
$a->strings['IRC settings saved.'] = 'Impostazioni IRC salvate.';
|
||||
$a->strings['IRC Settings'] = 'Impostazioni IRC';
|
||||
$a->strings['IRC Chatroom'] = 'Stanza IRC';
|
||||
$a->strings['Popular Channels'] = 'Canali Popolari';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
|
|
|
|||
|
|
@ -4,53 +4,56 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014
|
||||
# Aditoo, 2018
|
||||
# michal_s <msupler@gmail.com>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2014-07-07 19:13+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-03-23 23:53-0400\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:46+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: js_upload.php:43
|
||||
msgid "Upload a file"
|
||||
msgstr "Nahrát soubor"
|
||||
#: js_upload.php:34
|
||||
msgid "Select files for upload"
|
||||
msgstr ""
|
||||
|
||||
#: js_upload.php:44
|
||||
#: js_upload.php:35
|
||||
msgid "Drop files here to upload"
|
||||
msgstr "Přeneste sem soubory k nahrání"
|
||||
msgstr "Přetáhněte sem soubory k nahrání"
|
||||
|
||||
#: js_upload.php:45
|
||||
#: js_upload.php:36
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#: js_upload.php:46
|
||||
#: js_upload.php:37
|
||||
msgid "Failed"
|
||||
msgstr "Neúspěch"
|
||||
|
||||
#: js_upload.php:303
|
||||
#: js_upload.php:215
|
||||
msgid "No files were uploaded."
|
||||
msgstr "Žádné soubory nebyly nahrány."
|
||||
|
||||
#: js_upload.php:309
|
||||
#: js_upload.php:221
|
||||
msgid "Uploaded file is empty"
|
||||
msgstr "Nahraný soubor je prázdný"
|
||||
|
||||
#: js_upload.php:321
|
||||
msgid "Image exceeds size limit of "
|
||||
msgstr "Velikost obrázku překračuje limit velikosti"
|
||||
#: js_upload.php:233
|
||||
#, php-format
|
||||
msgid "Image exceeds size limit of %s"
|
||||
msgstr ""
|
||||
|
||||
#: js_upload.php:332
|
||||
msgid "File has an invalid extension, it should be one of "
|
||||
msgstr "Soubor má neplatnou příponu, ta by měla být jednou z"
|
||||
#: js_upload.php:245
|
||||
#, php-format
|
||||
msgid "File has an invalid extension, it should be one of %s."
|
||||
msgstr ""
|
||||
|
||||
#: js_upload.php:343
|
||||
#: js_upload.php:256
|
||||
msgid "Upload was cancelled, or server error encountered"
|
||||
msgstr "Nahrávání bylo zrušeno nebo došlo k chybě na serveru"
|
||||
|
|
|
|||
|
|
@ -3,14 +3,11 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Upload a file'] = 'Nahrát soubor';
|
||||
$a->strings['Drop files here to upload'] = 'Přeneste sem soubory k nahrání';
|
||||
$a->strings['Drop files here to upload'] = 'Přetáhněte sem soubory k nahrání';
|
||||
$a->strings['Cancel'] = 'Zrušit';
|
||||
$a->strings['Failed'] = 'Neúspěch';
|
||||
$a->strings['No files were uploaded.'] = 'Žádné soubory nebyly nahrány.';
|
||||
$a->strings['Uploaded file is empty'] = 'Nahraný soubor je prázdný';
|
||||
$a->strings['Image exceeds size limit of '] = 'Velikost obrázku překračuje limit velikosti';
|
||||
$a->strings['File has an invalid extension, it should be one of '] = 'Soubor má neplatnou příponu, ta by měla být jednou z';
|
||||
$a->strings['Upload was cancelled, or server error encountered'] = 'Nahrávání bylo zrušeno nebo došlo k chybě na serveru';
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-03-23 23:53-0400\n"
|
||||
"PO-Revision-Date: 2021-12-05 08:34+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:46+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -5,52 +5,55 @@
|
|||
#
|
||||
# Translators:
|
||||
# Albert, 2016
|
||||
# Senex Petrovic <javierruizo@hotmail.com>, 2021
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2016-11-17 18:59+0000\n"
|
||||
"Last-Translator: Albert\n"
|
||||
"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n"
|
||||
"POT-Creation-Date: 2021-03-23 23:53-0400\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:46+0000\n"
|
||||
"Last-Translator: Senex Petrovic <javierruizo@hotmail.com>, 2021\n"
|
||||
"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: es\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: js_upload.php:43
|
||||
msgid "Upload a file"
|
||||
msgstr "Subir un archivo"
|
||||
#: js_upload.php:34
|
||||
msgid "Select files for upload"
|
||||
msgstr "Seleciona archivos a subir"
|
||||
|
||||
#: js_upload.php:44
|
||||
#: js_upload.php:35
|
||||
msgid "Drop files here to upload"
|
||||
msgstr "Soltar archivos aquí para subir"
|
||||
|
||||
#: js_upload.php:45
|
||||
#: js_upload.php:36
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: js_upload.php:46
|
||||
#: js_upload.php:37
|
||||
msgid "Failed"
|
||||
msgstr "Fallido"
|
||||
|
||||
#: js_upload.php:303
|
||||
#: js_upload.php:215
|
||||
msgid "No files were uploaded."
|
||||
msgstr "No se subió ningún archivo."
|
||||
|
||||
#: js_upload.php:309
|
||||
#: js_upload.php:221
|
||||
msgid "Uploaded file is empty"
|
||||
msgstr "El archivo subido está vacío"
|
||||
|
||||
#: js_upload.php:321
|
||||
msgid "Image exceeds size limit of "
|
||||
msgstr "La imagen excede el tamaño de"
|
||||
#: js_upload.php:233
|
||||
#, php-format
|
||||
msgid "Image exceeds size limit of %s"
|
||||
msgstr ""
|
||||
|
||||
#: js_upload.php:332
|
||||
msgid "File has an invalid extension, it should be one of "
|
||||
msgstr "El archivo tiene una extensión inválida, debería ser una de"
|
||||
#: js_upload.php:245
|
||||
#, php-format
|
||||
msgid "File has an invalid extension, it should be one of %s."
|
||||
msgstr ""
|
||||
|
||||
#: js_upload.php:343
|
||||
#: js_upload.php:256
|
||||
msgid "Upload was cancelled, or server error encountered"
|
||||
msgstr "La subida fue cancelada, o el servidor tuvo un error"
|
||||
|
|
|
|||
|
|
@ -3,14 +3,12 @@
|
|||
if(! function_exists("string_plural_select_es")) {
|
||||
function string_plural_select_es($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Upload a file'] = 'Subir un archivo';
|
||||
$a->strings['Select files for upload'] = 'Seleciona archivos a subir';
|
||||
$a->strings['Drop files here to upload'] = 'Soltar archivos aquí para subir';
|
||||
$a->strings['Cancel'] = 'Cancelar';
|
||||
$a->strings['Failed'] = 'Fallido';
|
||||
$a->strings['No files were uploaded.'] = 'No se subió ningún archivo.';
|
||||
$a->strings['Uploaded file is empty'] = 'El archivo subido está vacío';
|
||||
$a->strings['Image exceeds size limit of '] = 'La imagen excede el tamaño de';
|
||||
$a->strings['File has an invalid extension, it should be one of '] = 'El archivo tiene una extensión inválida, debería ser una de';
|
||||
$a->strings['Upload was cancelled, or server error encountered'] = 'La subida fue cancelada, o el servidor tuvo un error';
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-03-23 23:53-0400\n"
|
||||
"PO-Revision-Date: 2021-05-05 10:50+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:46+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: js_upload.php:34
|
||||
msgid "Select files for upload"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Select files for upload'] = 'Seleziona file per il caricamento';
|
||||
$a->strings['Drop files here to upload'] = 'Trascina un file qui per caricarlo';
|
||||
|
|
|
|||
|
|
@ -5,52 +5,55 @@
|
|||
#
|
||||
# Translators:
|
||||
# Jeroen De Meerleer <me@jeroened.be>, 2018
|
||||
# Ruud Schilders <ruud@schilders.it>, 2020
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2018-08-24 11:48+0000\n"
|
||||
"Last-Translator: Jeroen De Meerleer <me@jeroened.be>\n"
|
||||
"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n"
|
||||
"POT-Creation-Date: 2021-03-23 23:53-0400\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:46+0000\n"
|
||||
"Last-Translator: Ruud Schilders <ruud@schilders.it>, 2020\n"
|
||||
"Language-Team: Dutch (http://app.transifex.com/Friendica/friendica/language/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: nl\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: js_upload.php:43
|
||||
msgid "Upload a file"
|
||||
msgstr "Upload een bestand"
|
||||
#: js_upload.php:34
|
||||
msgid "Select files for upload"
|
||||
msgstr ""
|
||||
|
||||
#: js_upload.php:44
|
||||
#: js_upload.php:35
|
||||
msgid "Drop files here to upload"
|
||||
msgstr "Sleep uw bestanden hier om ze te uploaden"
|
||||
|
||||
#: js_upload.php:45
|
||||
#: js_upload.php:36
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Afbreken"
|
||||
|
||||
#: js_upload.php:46
|
||||
#: js_upload.php:37
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
msgstr "Mislukt"
|
||||
|
||||
#: js_upload.php:303
|
||||
#: js_upload.php:215
|
||||
msgid "No files were uploaded."
|
||||
msgstr ""
|
||||
msgstr "Er waren geen bestanden geüpload."
|
||||
|
||||
#: js_upload.php:309
|
||||
#: js_upload.php:221
|
||||
msgid "Uploaded file is empty"
|
||||
msgstr "Het geüploade bestand is leeg"
|
||||
|
||||
#: js_upload.php:233
|
||||
#, php-format
|
||||
msgid "Image exceeds size limit of %s"
|
||||
msgstr ""
|
||||
|
||||
#: js_upload.php:321
|
||||
msgid "Image exceeds size limit of "
|
||||
#: js_upload.php:245
|
||||
#, php-format
|
||||
msgid "File has an invalid extension, it should be one of %s."
|
||||
msgstr ""
|
||||
|
||||
#: js_upload.php:332
|
||||
msgid "File has an invalid extension, it should be one of "
|
||||
msgstr ""
|
||||
|
||||
#: js_upload.php:343
|
||||
#: js_upload.php:256
|
||||
msgid "Upload was cancelled, or server error encountered"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -5,5 +5,8 @@ function string_plural_select_nl($n){
|
|||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
}}
|
||||
$a->strings['Upload a file'] = 'Upload een bestand';
|
||||
$a->strings['Drop files here to upload'] = 'Sleep uw bestanden hier om ze te uploaden';
|
||||
$a->strings['Cancel'] = 'Afbreken';
|
||||
$a->strings['Failed'] = 'Mislukt';
|
||||
$a->strings['No files were uploaded.'] = 'Er waren geen bestanden geüpload.';
|
||||
$a->strings['Uploaded file is empty'] = 'Het geüploade bestand is leeg';
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 16:22+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2015-07-07 15:14+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -10,28 +10,20 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-04-19 11:11+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2015-07-07 15:14+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: krynn.php:132 krynn.php:136
|
||||
msgid "Krynn"
|
||||
msgstr "Krynn"
|
||||
|
||||
#: krynn.php:141
|
||||
msgid "Krynn Settings"
|
||||
msgstr "Impostazioni Krynn"
|
||||
|
||||
#: krynn.php:143
|
||||
#: krynn.php:127
|
||||
msgid "Enable Krynn Addon"
|
||||
msgstr "Abilita componente aggiuntivo Krynn"
|
||||
|
||||
#: krynn.php:148
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
#: krynn.php:132
|
||||
msgid "Krynn Settings"
|
||||
msgstr "Impostazioni Krynn"
|
||||
|
|
|
|||
|
|
@ -3,9 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Krynn'] = 'Krynn';
|
||||
$a->strings['Krynn Settings'] = 'Impostazioni Krynn';
|
||||
$a->strings['Enable Krynn Addon'] = 'Abilita componente aggiuntivo Krynn';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Krynn Settings'] = 'Impostazioni Krynn';
|
||||
|
|
|
|||
|
|
@ -4,73 +4,74 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# abidin toumi <abidin24@tutanota.com>, 2021
|
||||
# Farida Khalaf <faridakhalaf@hotmail.com>, 2021
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-04-26 09:14+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2015-07-25 08:05+0000\n"
|
||||
"Last-Translator: abidin toumi <abidin24@tutanota.com>, 2021\n"
|
||||
"Language-Team: Arabic (http://app.transifex.com/Friendica/friendica/language/ar/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ar\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
|
||||
#: langfilter.php:50
|
||||
msgid "Language Filter"
|
||||
msgstr "اللغة"
|
||||
|
||||
#: langfilter.php:51
|
||||
#: langfilter.php:49
|
||||
msgid ""
|
||||
"This addon tries to identify the language posts are written in. If it does "
|
||||
"not match any language specified below, posts will be hidden by collapsing "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: langfilter.php:52
|
||||
#: langfilter.php:50
|
||||
msgid "Use the language filter"
|
||||
msgstr "اختيار اللغة"
|
||||
|
||||
#: langfilter.php:53
|
||||
#: langfilter.php:51
|
||||
msgid "Able to read"
|
||||
msgstr " قابل للقراءة"
|
||||
|
||||
#: langfilter.php:53
|
||||
#: langfilter.php:51
|
||||
msgid ""
|
||||
"List of abbreviations (ISO 639-1 codes) for languages you speak, comma "
|
||||
"separated. For example \"de,it\"."
|
||||
msgstr "قائمة الرموز ( ISO 639-1) للغات ، مفصولة بفواصل. على سبيل المثال \"de، it\""
|
||||
|
||||
#: langfilter.php:54
|
||||
#: langfilter.php:52
|
||||
msgid "Minimum confidence in language detection"
|
||||
msgstr "الحد الأدنى من نسبة اكتشاف اللغة"
|
||||
|
||||
#: langfilter.php:54
|
||||
#: langfilter.php:52
|
||||
msgid ""
|
||||
"Minimum confidence in language detection being correct, from 0 to 100. Posts"
|
||||
" will not be filtered when the confidence of language detection is below "
|
||||
"this percent value."
|
||||
msgstr "الحد الأدنى من صحة اكتشاف اللغة ، من 0 إلى 100. لن تتم فلترة المشاركات عندما تكون صحة اكتشاف اللغة أقل من هذه النسبة المئوية."
|
||||
|
||||
#: langfilter.php:55
|
||||
#: langfilter.php:53
|
||||
msgid "Minimum length of message body"
|
||||
msgstr "الحد الأدنى لنص الرسالة"
|
||||
|
||||
#: langfilter.php:55
|
||||
#: langfilter.php:53
|
||||
msgid ""
|
||||
"Minimum number of characters in message body for filter to be used. Posts "
|
||||
"shorter than this will not be filtered. Note: Language detection is "
|
||||
"unreliable for short content (<200 characters)."
|
||||
msgstr "الحد الأدنى لأحرف نص الرسالة لاستخدام الفلتر. لن يتم فلترة المشاركات الأقصر من هذا. ملاحظة: لا يمكن الاعتماد على اكتشاف اللغة للمحتوى القصير (<200 حرف)."
|
||||
|
||||
#: langfilter.php:56
|
||||
#: langfilter.php:58
|
||||
msgid "Language Filter"
|
||||
msgstr "مرشح اللغة"
|
||||
|
||||
#: langfilter.php:60
|
||||
msgid "Save Settings"
|
||||
msgstr "حفظ الإعدادات"
|
||||
|
||||
#: langfilter.php:187
|
||||
#: langfilter.php:193
|
||||
#, php-format
|
||||
msgid "Filtered language: %s"
|
||||
msgstr "اختيار اللغة: %s"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ function string_plural_select_ar($n){
|
|||
$n = intval($n);
|
||||
if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; }
|
||||
}}
|
||||
$a->strings['Language Filter'] = 'اللغة';
|
||||
$a->strings['Use the language filter'] = 'اختيار اللغة';
|
||||
$a->strings['Able to read'] = ' قابل للقراءة';
|
||||
$a->strings['List of abbreviations (ISO 639-1 codes) for languages you speak, comma separated. For example "de,it".'] = 'قائمة الرموز ( ISO 639-1) للغات ، مفصولة بفواصل. على سبيل المثال "de، it"';
|
||||
|
|
@ -13,5 +12,6 @@ $a->strings['Minimum confidence in language detection'] = 'الحد الأدنى
|
|||
$a->strings['Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value.'] = 'الحد الأدنى من صحة اكتشاف اللغة ، من 0 إلى 100. لن تتم فلترة المشاركات عندما تكون صحة اكتشاف اللغة أقل من هذه النسبة المئوية.';
|
||||
$a->strings['Minimum length of message body'] = 'الحد الأدنى لنص الرسالة';
|
||||
$a->strings['Minimum number of characters in message body for filter to be used. Posts shorter than this will not be filtered. Note: Language detection is unreliable for short content (<200 characters).'] = 'الحد الأدنى لأحرف نص الرسالة لاستخدام الفلتر. لن يتم فلترة المشاركات الأقصر من هذا. ملاحظة: لا يمكن الاعتماد على اكتشاف اللغة للمحتوى القصير (<200 حرف).';
|
||||
$a->strings['Language Filter'] = 'مرشح اللغة';
|
||||
$a->strings['Save Settings'] = 'حفظ الإعدادات';
|
||||
$a->strings['Filtered language: %s'] = 'اختيار اللغة: %s';
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#
|
||||
# Translators:
|
||||
# Andreas H., 2018
|
||||
# Copiis Praeesse <richard@zsemberi.de>, 2018
|
||||
# Copiis Praeesse <copiis@vivaldi.net>, 2018
|
||||
# Ralf Thees <ralf@herrthees.de>, 2019
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2015
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2020-2021
|
||||
|
|
@ -15,9 +15,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2021-10-19 18:08+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2015-07-25 08:05+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2020-2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -12,68 +12,68 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-10-17 21:25+0000\n"
|
||||
"Last-Translator: SickShark X\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2015-07-25 08:05+0000\n"
|
||||
"Last-Translator: SickShark X, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: langfilter.php:50
|
||||
msgid "Language Filter"
|
||||
msgstr "Filtro Lingua"
|
||||
|
||||
#: langfilter.php:51
|
||||
#: langfilter.php:49
|
||||
msgid ""
|
||||
"This addon tries to identify the language posts are written in. If it does "
|
||||
"not match any language specified below, posts will be hidden by collapsing "
|
||||
"them."
|
||||
msgstr "Questo plug-in prova a identificare la lingua con cui sono stati scritti i posts. Se non corrisponde a nessuna delle lingue specificate qui sotto, i post verranno nascosti."
|
||||
|
||||
#: langfilter.php:52
|
||||
#: langfilter.php:50
|
||||
msgid "Use the language filter"
|
||||
msgstr "Usa il filtro lingua"
|
||||
|
||||
#: langfilter.php:53
|
||||
#: langfilter.php:51
|
||||
msgid "Able to read"
|
||||
msgstr "In grado di leggere"
|
||||
|
||||
#: langfilter.php:53
|
||||
#: langfilter.php:51
|
||||
msgid ""
|
||||
"List of abbreviations (ISO 639-1 codes) for languages you speak, comma "
|
||||
"separated. For example \"de,it\"."
|
||||
msgstr "Lista di abbreviazioni (codici ISO 639-1) per le lingue che parli, separate da virgola. Per esempio \"it,de\"."
|
||||
|
||||
#: langfilter.php:54
|
||||
#: langfilter.php:52
|
||||
msgid "Minimum confidence in language detection"
|
||||
msgstr "Fiducia minima nel rilevamento della lingua"
|
||||
|
||||
#: langfilter.php:54
|
||||
#: langfilter.php:52
|
||||
msgid ""
|
||||
"Minimum confidence in language detection being correct, from 0 to 100. Posts"
|
||||
" will not be filtered when the confidence of language detection is below "
|
||||
"this percent value."
|
||||
msgstr "Fiducia minima che il rilevamento della lingua sia corretto, da 0 a 100. I messaggi non saranno filtrati quando la fiducia nel rilevamento della lingua è sotto questo valore percentuale."
|
||||
|
||||
#: langfilter.php:55
|
||||
#: langfilter.php:53
|
||||
msgid "Minimum length of message body"
|
||||
msgstr "Lunghezza minima del corpo del messaggio"
|
||||
|
||||
#: langfilter.php:55
|
||||
#: langfilter.php:53
|
||||
msgid ""
|
||||
"Minimum number of characters in message body for filter to be used. Posts "
|
||||
"shorter than this will not be filtered. Note: Language detection is "
|
||||
"unreliable for short content (<200 characters)."
|
||||
msgstr "Numero di caratteri minimo perché il filtro venga usato. I messaggio più corti non saranno filtrati. Nota: la rilevazione della lingua non è affidabile con messaggi brevi (<200 caratteri)"
|
||||
|
||||
#: langfilter.php:56
|
||||
#: langfilter.php:58
|
||||
msgid "Language Filter"
|
||||
msgstr "Filtro Lingua"
|
||||
|
||||
#: langfilter.php:60
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: langfilter.php:187
|
||||
#: langfilter.php:193
|
||||
#, php-format
|
||||
msgid "Filtered language: %s"
|
||||
msgstr "Lingua filtrata: %s"
|
||||
|
|
|
|||
|
|
@ -3,9 +3,8 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Language Filter'] = 'Filtro Lingua';
|
||||
$a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = 'Questo plug-in prova a identificare la lingua con cui sono stati scritti i posts. Se non corrisponde a nessuna delle lingue specificate qui sotto, i post verranno nascosti.';
|
||||
$a->strings['Use the language filter'] = 'Usa il filtro lingua';
|
||||
$a->strings['Able to read'] = 'In grado di leggere';
|
||||
|
|
@ -14,5 +13,6 @@ $a->strings['Minimum confidence in language detection'] = 'Fiducia minima nel ri
|
|||
$a->strings['Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value.'] = 'Fiducia minima che il rilevamento della lingua sia corretto, da 0 a 100. I messaggi non saranno filtrati quando la fiducia nel rilevamento della lingua è sotto questo valore percentuale.';
|
||||
$a->strings['Minimum length of message body'] = 'Lunghezza minima del corpo del messaggio';
|
||||
$a->strings['Minimum number of characters in message body for filter to be used. Posts shorter than this will not be filtered. Note: Language detection is unreliable for short content (<200 characters).'] = 'Numero di caratteri minimo perché il filtro venga usato. I messaggio più corti non saranno filtrati. Nota: la rilevazione della lingua non è affidabile con messaggi brevi (<200 caratteri)';
|
||||
$a->strings['Language Filter'] = 'Filtro Lingua';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Filtered language: %s'] = 'Lingua filtrata: %s';
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ function langfilter_prepare_body_content_filter(&$hook_data)
|
|||
|
||||
// Never filter own messages
|
||||
// TODO: find a better way to extract this
|
||||
$logged_user_profile = DI::baseUrl()->get() . '/profile/' . DI::userSession()->getLocalUserNickname();
|
||||
$logged_user_profile = DI::baseUrl() . '/profile/' . DI::userSession()->getLocalUserNickname();
|
||||
if ($logged_user_profile == $hook_data['item']['author-link']) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,45 +4,42 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014-2015
|
||||
# Aditoo, 2018
|
||||
# michal_s <msupler@gmail.com>, 2014-2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2015-02-11 19:39+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:44+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: libertree.php:36
|
||||
#: libertree.php:39
|
||||
msgid "Post to libertree"
|
||||
msgstr "Poslat na libertree"
|
||||
|
||||
#: libertree.php:67
|
||||
msgid "libertree Post Settings"
|
||||
msgstr "libertree nastavení příspěvků"
|
||||
|
||||
#: libertree.php:69
|
||||
#: libertree.php:60
|
||||
msgid "Enable Libertree Post Addon"
|
||||
msgstr "Povolit Libertree Post rozšíření"
|
||||
msgstr "Povolit doplněk Libertree Post"
|
||||
|
||||
#: libertree.php:74
|
||||
msgid "Libertree API token"
|
||||
msgstr "Libertree API token"
|
||||
|
||||
#: libertree.php:79
|
||||
#: libertree.php:61
|
||||
msgid "Libertree site URL"
|
||||
msgstr "URL adresa Libertree "
|
||||
|
||||
#: libertree.php:84
|
||||
msgid "Post to Libertree by default"
|
||||
msgstr "Defaultně poslat na Libertree"
|
||||
#: libertree.php:62
|
||||
msgid "Libertree API token"
|
||||
msgstr "Libertree API token"
|
||||
|
||||
#: libertree.php:90
|
||||
msgid "Submit"
|
||||
msgstr "Odeslat"
|
||||
#: libertree.php:63
|
||||
msgid "Post to Libertree by default"
|
||||
msgstr "Ve výchozím stavu posílat na Libertree"
|
||||
|
||||
#: libertree.php:68
|
||||
msgid "Libertree Export"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -3,12 +3,10 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Post to libertree'] = 'Poslat na libertree';
|
||||
$a->strings['libertree Post Settings'] = 'libertree nastavení příspěvků';
|
||||
$a->strings['Enable Libertree Post Addon'] = 'Povolit Libertree Post rozšíření';
|
||||
$a->strings['Libertree API token'] = 'Libertree API token';
|
||||
$a->strings['Enable Libertree Post Addon'] = 'Povolit doplněk Libertree Post';
|
||||
$a->strings['Libertree site URL'] = 'URL adresa Libertree ';
|
||||
$a->strings['Post to Libertree by default'] = 'Defaultně poslat na Libertree';
|
||||
$a->strings['Submit'] = 'Odeslat';
|
||||
$a->strings['Libertree API token'] = 'Libertree API token';
|
||||
$a->strings['Post to Libertree by default'] = 'Ve výchozím stavu posílat na Libertree';
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2022-01-22 17:34+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:44+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021-2022\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ function libertree_send(array &$b)
|
|||
$ltree_api_token = DI::pConfig()->get($b['uid'],'libertree','libertree_api_token');
|
||||
$ltree_url = DI::pConfig()->get($b['uid'],'libertree','libertree_url');
|
||||
$ltree_blog = "$ltree_url/api/v1/posts/create/?token=$ltree_api_token";
|
||||
$ltree_source = DI::baseUrl()->getHostname();
|
||||
$ltree_source = DI::baseUrl()->getHost();
|
||||
|
||||
if ($b['app'] != "")
|
||||
$ltree_source .= " (".$b['app'].")";
|
||||
|
|
|
|||
|
|
@ -12,10 +12,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-12-08 07:16+0000\n"
|
||||
"PO-Revision-Date: 2021-02-01 06:30+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:49+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-05-05 11:06+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:49+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: libravatar.php:68
|
||||
msgid "generic profile image"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['generic profile image'] = 'immagine generica del profilo';
|
||||
$a->strings['random geometric pattern'] = 'schema geometrico casuale';
|
||||
|
|
|
|||
|
|
@ -4,45 +4,42 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014-2015
|
||||
# Aditoo, 2018
|
||||
# michal_s <msupler@gmail.com>, 2014-2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2015-02-11 19:38+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:51+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: ljpost.php:39
|
||||
#: ljpost.php:43
|
||||
msgid "Post to LiveJournal"
|
||||
msgstr "Poslat na LiveJournal"
|
||||
msgstr "Odeslat na LiveJournal"
|
||||
|
||||
#: ljpost.php:70
|
||||
msgid "LiveJournal Post Settings"
|
||||
msgstr "Nastavení LiveJournal Post"
|
||||
|
||||
#: ljpost.php:72
|
||||
#: ljpost.php:63
|
||||
msgid "Enable LiveJournal Post Addon"
|
||||
msgstr "Povolit LiveJournal Post addon"
|
||||
msgstr "Povolit doplněk LiveJournal Post"
|
||||
|
||||
#: ljpost.php:77
|
||||
#: ljpost.php:64
|
||||
msgid "LiveJournal username"
|
||||
msgstr "LiveJournal uživatelské jméno"
|
||||
|
||||
#: ljpost.php:82
|
||||
#: ljpost.php:65
|
||||
msgid "LiveJournal password"
|
||||
msgstr "LiveJournal heslo"
|
||||
|
||||
#: ljpost.php:87
|
||||
#: ljpost.php:66
|
||||
msgid "Post to LiveJournal by default"
|
||||
msgstr "Defaultně umístit na LiveJournal"
|
||||
|
||||
#: ljpost.php:93
|
||||
msgid "Submit"
|
||||
msgstr "Odeslat"
|
||||
#: ljpost.php:71
|
||||
msgid "LiveJournal Export"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -3,12 +3,10 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Post to LiveJournal'] = 'Poslat na LiveJournal';
|
||||
$a->strings['LiveJournal Post Settings'] = 'Nastavení LiveJournal Post';
|
||||
$a->strings['Enable LiveJournal Post Addon'] = 'Povolit LiveJournal Post addon';
|
||||
$a->strings['Post to LiveJournal'] = 'Odeslat na LiveJournal';
|
||||
$a->strings['Enable LiveJournal Post Addon'] = 'Povolit doplněk LiveJournal Post';
|
||||
$a->strings['LiveJournal username'] = 'LiveJournal uživatelské jméno';
|
||||
$a->strings['LiveJournal password'] = 'LiveJournal heslo';
|
||||
$a->strings['Post to LiveJournal by default'] = 'Defaultně umístit na LiveJournal';
|
||||
$a->strings['Submit'] = 'Odeslat';
|
||||
|
|
|
|||
|
|
@ -6,16 +6,16 @@
|
|||
# Translators:
|
||||
# Andreas H., 2014
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021-2022
|
||||
# Ulf Rompe <transifex.com@rompe.org>, 2019
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 17:23+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:51+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021-2022\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
@ -44,4 +44,4 @@ msgstr "Standardmäßig bei LiveJournal veröffentlichen"
|
|||
|
||||
#: ljpost.php:71
|
||||
msgid "LiveJournal Export"
|
||||
msgstr ""
|
||||
msgstr "LiveJournal Export"
|
||||
|
|
|
|||
|
|
@ -10,3 +10,4 @@ $a->strings['Enable LiveJournal Post Addon'] = 'LiveJournal-Post-Addon aktiviere
|
|||
$a->strings['LiveJournal username'] = 'LiveJournal-Benutzername';
|
||||
$a->strings['LiveJournal password'] = 'LiveJournal-Passwort';
|
||||
$a->strings['Post to LiveJournal by default'] = 'Standardmäßig bei LiveJournal veröffentlichen';
|
||||
$a->strings['LiveJournal Export'] = 'LiveJournal Export';
|
||||
|
|
|
|||
|
|
@ -5,45 +5,41 @@
|
|||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2014-2015,2018
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021,2023
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:57+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:51+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021,2023\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: ljpost.php:39
|
||||
#: ljpost.php:43
|
||||
msgid "Post to LiveJournal"
|
||||
msgstr "Invia a LiveJournal"
|
||||
|
||||
#: ljpost.php:73
|
||||
msgid "LiveJournal Post Settings"
|
||||
msgstr "Impostazioni invio a LiveJournal"
|
||||
|
||||
#: ljpost.php:75
|
||||
#: ljpost.php:63
|
||||
msgid "Enable LiveJournal Post Addon"
|
||||
msgstr "Abilita il componente aggiuntivo di invio a LiveJournal"
|
||||
|
||||
#: ljpost.php:80
|
||||
#: ljpost.php:64
|
||||
msgid "LiveJournal username"
|
||||
msgstr "Nome utente LiveJournal"
|
||||
|
||||
#: ljpost.php:85
|
||||
#: ljpost.php:65
|
||||
msgid "LiveJournal password"
|
||||
msgstr "Password LiveJournal"
|
||||
|
||||
#: ljpost.php:90
|
||||
#: ljpost.php:66
|
||||
msgid "Post to LiveJournal by default"
|
||||
msgstr "Invia sempre a LiveJournal"
|
||||
|
||||
#: ljpost.php:96
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
#: ljpost.php:71
|
||||
msgid "LiveJournal Export"
|
||||
msgstr "Esporta LiveJournal"
|
||||
|
|
|
|||
|
|
@ -3,12 +3,11 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Post to LiveJournal'] = 'Invia a LiveJournal';
|
||||
$a->strings['LiveJournal Post Settings'] = 'Impostazioni invio a LiveJournal';
|
||||
$a->strings['Enable LiveJournal Post Addon'] = 'Abilita il componente aggiuntivo di invio a LiveJournal';
|
||||
$a->strings['LiveJournal username'] = 'Nome utente LiveJournal';
|
||||
$a->strings['LiveJournal password'] = 'Password LiveJournal';
|
||||
$a->strings['Post to LiveJournal by default'] = 'Invia sempre a LiveJournal';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['LiveJournal Export'] = 'Esporta LiveJournal';
|
||||
|
|
|
|||
|
|
@ -29,68 +29,72 @@ msgstr ""
|
|||
msgid "Save Settings"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:301
|
||||
#: mailstream.php:311
|
||||
msgid "Re:"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:314 mailstream.php:317
|
||||
#: mailstream.php:324 mailstream.php:327
|
||||
msgid "Friendica post"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:320
|
||||
#: mailstream.php:330
|
||||
msgid "Diaspora post"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:330
|
||||
#: mailstream.php:340
|
||||
msgid "Feed item"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:333
|
||||
#: mailstream.php:343
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:335
|
||||
#: mailstream.php:345
|
||||
msgid "Friendica Item"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:404
|
||||
#: mailstream.php:419
|
||||
msgid "Upstream"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:405
|
||||
#: mailstream.php:420
|
||||
msgid "URI"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:421
|
||||
msgid "Local"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:481
|
||||
#: mailstream.php:499
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:486
|
||||
#: mailstream.php:504
|
||||
msgid "Email Address"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:488
|
||||
#: mailstream.php:506
|
||||
msgid "Leave blank to use your account email address"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:492
|
||||
#: mailstream.php:510
|
||||
msgid "Exclude Likes"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:494
|
||||
#: mailstream.php:512
|
||||
msgid "Check this to omit mailing \"Like\" notifications"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:498
|
||||
#: mailstream.php:516
|
||||
msgid "Attach Images"
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:500
|
||||
#: mailstream.php:518
|
||||
msgid ""
|
||||
"Download images in posts and attach them to the email. Useful for reading "
|
||||
"email while offline."
|
||||
msgstr ""
|
||||
|
||||
#: mailstream.php:507
|
||||
#: mailstream.php:525
|
||||
msgid "Mail Stream Settings"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ function mailstream_install()
|
|||
Hook::register('addon_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_addon_settings_post');
|
||||
Hook::register('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook');
|
||||
Hook::register('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook');
|
||||
Hook::register('cron', 'addon/mailstream/mailstream.php', 'mailstream_cron');
|
||||
Hook::register('mailstream_send_hook', 'addon/mailstream/mailstream.php', 'mailstream_send_hook');
|
||||
|
||||
Logger::info("mailstream: installed");
|
||||
|
|
@ -67,9 +66,10 @@ function mailstream_module() {}
|
|||
/**
|
||||
* Adds an item in "addon features" in the admin menu of the site
|
||||
*
|
||||
* @param App $a App object (unused)
|
||||
* @param string $o HTML form data
|
||||
*/
|
||||
function mailstream_addon_admin(string &$o)
|
||||
function mailstream_addon_admin(App $a, string &$o)
|
||||
{
|
||||
$frommail = DI::config()->get('mailstream', 'frommail');
|
||||
$template = Renderer::getMarkupTemplate('admin.tpl', 'addon/mailstream/');
|
||||
|
|
@ -110,7 +110,7 @@ function mailstream_generate_id(string $uri): string
|
|||
return $message_id;
|
||||
}
|
||||
|
||||
function mailstream_send_hook(array $data)
|
||||
function mailstream_send_hook(App $a, array $data)
|
||||
{
|
||||
$criteria = array('uid' => $data['uid'], 'contact-id' => $data['contact-id'], 'uri' => $data['uri']);
|
||||
$item = Post::selectFirst([], $criteria);
|
||||
|
|
@ -138,15 +138,16 @@ function mailstream_send_hook(array $data)
|
|||
* mailstream is enabled and the necessary data is available, forks a
|
||||
* workerqueue item to send the email.
|
||||
*
|
||||
* @param App $a App object (unused)
|
||||
* @param array $item content of the item (may or may not already be stored in the item table)
|
||||
* @return void
|
||||
*/
|
||||
function mailstream_post_hook(array &$item)
|
||||
function mailstream_post_hook(App $a, array &$item)
|
||||
{
|
||||
mailstream_check_version();
|
||||
|
||||
if (!DI::pConfig()->get($item['uid'], 'mailstream', 'enabled')) {
|
||||
Logger::debug('mailstream: not enabled for item ' . $item['id']);
|
||||
Logger::debug('mailstream: not enabled.', ['item' => $item['id'], ' uid ' => $item['uid']]);
|
||||
return;
|
||||
}
|
||||
if (!$item['uid']) {
|
||||
|
|
@ -161,8 +162,8 @@ function mailstream_post_hook(array &$item)
|
|||
Logger::debug('mailstream: no uri for item ' . $item['id']);
|
||||
return;
|
||||
}
|
||||
if (!$item['plink']) {
|
||||
Logger::debug('mailstream: no plink for item ' . $item['id']);
|
||||
if ($item['verb'] == Activity::ANNOUNCE) {
|
||||
Logger::debug('mailstream: announce item ', ['item' => $item['id']]);
|
||||
return;
|
||||
}
|
||||
if (DI::pConfig()->get($item['uid'], 'mailstream', 'nolikes')) {
|
||||
|
|
@ -395,7 +396,9 @@ function mailstream_send(string $message_id, array $item, array $user): bool
|
|||
$mail->addCustomHeader('In-Reply-To: ' . mailstream_generate_id($item['thr-parent']));
|
||||
}
|
||||
$mail->addCustomHeader('X-Friendica-Mailstream-URI: ' . $item['uri']);
|
||||
$mail->addCustomHeader('X-Friendica-Mailstream-Plink: ' . $item['plink']);
|
||||
if ($item['plink']) {
|
||||
$mail->addCustomHeader('X-Friendica-Mailstream-Plink: ' . $item['plink']);
|
||||
}
|
||||
$encoding = 'base64';
|
||||
foreach ($attachments as $url => $image) {
|
||||
$mail->AddStringEmbeddedImage(
|
||||
|
|
@ -414,9 +417,10 @@ function mailstream_send(string $message_id, array $item, array $user): bool
|
|||
$item['url'] = DI::baseUrl()->get() . '/display/' . $item['guid'];
|
||||
$mail->Body = Renderer::replaceMacros($template, [
|
||||
'$upstream' => DI::l10n()->t('Upstream'),
|
||||
'$uri' => DI::l10n()->t('URI'),
|
||||
'$local' => DI::l10n()->t('Local'),
|
||||
'$item' => $item]);
|
||||
mailstream_html_wrap($mail->Body);
|
||||
$mail->Body = mailstream_html_wrap($mail->Body);
|
||||
if (!$mail->Send()) {
|
||||
throw new Exception($mail->ErrorInfo);
|
||||
}
|
||||
|
|
@ -437,7 +441,8 @@ function mailstream_send(string $message_id, array $item, array $user): bool
|
|||
* bbcode's output suitable for transmission, we try to break things
|
||||
* up so that lines are about 200 characters.
|
||||
*
|
||||
* @param string $text text to word wrap - modified in-place
|
||||
* @param string $text text to word wrap
|
||||
* @return string wrapped text
|
||||
*/
|
||||
function mailstream_html_wrap(string &$text)
|
||||
{
|
||||
|
|
@ -446,6 +451,7 @@ function mailstream_html_wrap(string &$text)
|
|||
$lines[$i] = preg_replace('/ /', "\n", $lines[$i], 1);
|
||||
}
|
||||
$text = implode($lines);
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -462,8 +468,7 @@ function mailstream_convert_table_entries()
|
|||
'message_id' => $ms_item_id['message-id'],
|
||||
'tries' => 0);
|
||||
if (!$ms_item_id['message-id'] || !strlen($ms_item_id['message-id'])) {
|
||||
Logger::info('mailstream_cron: Item ' .
|
||||
$ms_item_id['id'] . ' URI ' . $ms_item_id['uri'] . ' has no message-id');
|
||||
Logger::info('mailstream_convert_table_entries: item has no message-id.', 'item' => $ms_item_id['id'], 'uri' => $ms_item_id['uri']]);
|
||||
continue;
|
||||
}
|
||||
Logger::info('mailstream_convert_table_entries: convert item to workerqueue', $send_hook_data);
|
||||
|
|
@ -475,10 +480,11 @@ function mailstream_convert_table_entries()
|
|||
/**
|
||||
* Form for configuring mailstream features for a user
|
||||
*
|
||||
* @param App $a App object
|
||||
* @param array $data Hook data array
|
||||
* @throws \Friendica\Network\HTTPException\ServiceUnavailableException
|
||||
*/
|
||||
function mailstream_addon_settings(array &$data)
|
||||
function mailstream_addon_settings(App &$a, array &$data)
|
||||
{
|
||||
$enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'mailstream', 'enabled');
|
||||
$address = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'mailstream', 'address');
|
||||
|
|
@ -522,10 +528,11 @@ function mailstream_addon_settings(array &$data)
|
|||
|
||||
/**
|
||||
* Process data submitted to user's mailstream features form
|
||||
* @param App $a
|
||||
* @param array $post POST data
|
||||
* @return void
|
||||
*/
|
||||
function mailstream_addon_settings_post(array $post)
|
||||
function mailstream_addon_settings_post(App $a, array $post)
|
||||
{
|
||||
if (!DI::userSession()->getLocalUserId() || empty($post['mailstream-submit'])) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -6,5 +6,6 @@
|
|||
<div class="mailstream-item-body">{{$item.body nofilter}}</div>
|
||||
{{if $item.plink}}
|
||||
<div>{{$upstream}}: <a class="mailstream-item-plink" href="{{$item.plink}}">{{$item.plink}}</a><div>
|
||||
<div>{{$uri}}: <a class="mailstream-item-uri" href="{{$item.uri}}">{{$item.uri}}</a><div>
|
||||
<div>{{$local}}: <a class="mailstream-item-url" href="{{$item.url}}">{{$item.url}}</a></div>
|
||||
{{/if}}
|
||||
|
|
|
|||
|
|
@ -4,50 +4,29 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014-2015
|
||||
# Aditoo, 2018
|
||||
# michal_s <msupler@gmail.com>, 2014-2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2015-02-11 19:38+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:55+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: mathjax.php:36
|
||||
msgid "Settings"
|
||||
msgstr "Nastavení"
|
||||
|
||||
#: mathjax.php:37
|
||||
#: mathjax.php:42
|
||||
msgid ""
|
||||
"The MathJax addon renders mathematical formulae written using the LaTeX "
|
||||
"syntax surrounded by the usual $$ or an eqnarray block in the postings of "
|
||||
"your wall,network tab and private mail."
|
||||
msgstr "Rozšíření MathJax vykresluje matematické vzorce zapsané s použitím syntaxe LaTeX označené obvyklými znaky $$ nebo v bloku \"eqnarray\" v příspěvcích na vaší zdi, záložce síť a soukromých zprávách."
|
||||
msgstr "Doplněk MathJax vykresluje matematické vzorce zapsané s použitím syntaxe LaTeX označené obvyklými znaky $$, nebo blok \"eqnarray\" v příspěvcích na Vaší zdi, záložce Síť a soukromých zprávách."
|
||||
|
||||
#: mathjax.php:38
|
||||
#: mathjax.php:43
|
||||
msgid "Use the MathJax renderer"
|
||||
msgstr "Použít Mathjax vykreslování"
|
||||
|
||||
#: mathjax.php:42
|
||||
msgid "Submit"
|
||||
msgstr "Odeslat"
|
||||
|
||||
#: mathjax.php:66
|
||||
msgid "Settings updated."
|
||||
msgstr "Nastavení aktualizováno."
|
||||
|
||||
#: mathjax.php:75
|
||||
msgid "MathJax Base URL"
|
||||
msgstr "Základní MathJax adresa URL"
|
||||
|
||||
#: mathjax.php:75
|
||||
msgid ""
|
||||
"The URL for the javascript file that should be included to use MathJax. Can "
|
||||
"be either the MathJax CDN or another installation of MathJax."
|
||||
msgstr "URL adresa na javascriptový soubor, který musí být obsažen pro použití MathJax. Může to být MathJax CDN nebo or jiná instalace MathJax."
|
||||
msgstr "Použít vykreslování MathJax"
|
||||
|
|
|
|||
|
|
@ -3,12 +3,7 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Settings'] = 'Nastavení';
|
||||
$a->strings['The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail.'] = 'Rozšíření MathJax vykresluje matematické vzorce zapsané s použitím syntaxe LaTeX označené obvyklými znaky $$ nebo v bloku "eqnarray" v příspěvcích na vaší zdi, záložce síť a soukromých zprávách.';
|
||||
$a->strings['Use the MathJax renderer'] = 'Použít Mathjax vykreslování';
|
||||
$a->strings['Submit'] = 'Odeslat';
|
||||
$a->strings['Settings updated.'] = 'Nastavení aktualizováno.';
|
||||
$a->strings['MathJax Base URL'] = 'Základní MathJax adresa URL';
|
||||
$a->strings['The URL for the javascript file that should be included to use MathJax. Can be either the MathJax CDN or another installation of MathJax.'] = 'URL adresa na javascriptový soubor, který musí být obsažen pro použití MathJax. Může to být MathJax CDN nebo or jiná instalace MathJax.';
|
||||
$a->strings['The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail.'] = 'Doplněk MathJax vykresluje matematické vzorce zapsané s použitím syntaxe LaTeX označené obvyklými znaky $$, nebo blok "eqnarray" v příspěvcích na Vaší zdi, záložce Síť a soukromých zprávách.';
|
||||
$a->strings['Use the MathJax renderer'] = 'Použít vykreslování MathJax';
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 16:24+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:55+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -10,27 +10,23 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:51+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:55+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: mathjax.php:43
|
||||
#: mathjax.php:42
|
||||
msgid ""
|
||||
"The MathJax addon renders mathematical formulae written using the LaTeX "
|
||||
"syntax surrounded by the usual $$ or an eqnarray block in the postings of "
|
||||
"your wall,network tab and private mail."
|
||||
msgstr "Il plugin \"MatJax\" renderizza formule matematiche scritta usando la sintassi LaTeX circondate dalle usuali $$ o un blocco eqnarray nei messaggi della tua bacheca, pagina Rete e messaggi privati."
|
||||
|
||||
#: mathjax.php:44
|
||||
#: mathjax.php:43
|
||||
msgid "Use the MathJax renderer"
|
||||
msgstr "Usa il render MathJax"
|
||||
|
||||
#: mathjax.php:45
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
|
|
|||
|
|
@ -3,8 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail.'] = 'Il plugin "MatJax" renderizza formule matematiche scritta usando la sintassi LaTeX circondate dalle usuali $$ o un blocco eqnarray nei messaggi della tua bacheca, pagina Rete e messaggi privati.';
|
||||
$a->strings['Use the MathJax renderer'] = 'Usa il render MathJax';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
|
|
|
|||
|
|
@ -4,73 +4,74 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014
|
||||
# Aditoo, 2018
|
||||
# michal_s <msupler@gmail.com>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-01 14:12+0200\n"
|
||||
"PO-Revision-Date: 2014-07-07 19:25+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:26+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: newmemberwidget.php:21
|
||||
#: newmemberwidget.php:29
|
||||
msgid "New Member"
|
||||
msgstr "Nový člen"
|
||||
|
||||
#: newmemberwidget.php:22
|
||||
#: newmemberwidget.php:30
|
||||
msgid "Tips for New Members"
|
||||
msgstr "Tipy pro nové členy"
|
||||
|
||||
#: newmemberwidget.php:24
|
||||
#: newmemberwidget.php:33
|
||||
msgid "Global Support Forum"
|
||||
msgstr "Globální fórum podpory"
|
||||
|
||||
#: newmemberwidget.php:26
|
||||
#: newmemberwidget.php:37
|
||||
msgid "Local Support Forum"
|
||||
msgstr "Lokální fórum podpory"
|
||||
msgstr "Místní fórum podpory"
|
||||
|
||||
#: newmemberwidget.php:49
|
||||
#: newmemberwidget.php:65
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit Nastavení"
|
||||
msgstr "Uložit nastavení"
|
||||
|
||||
#: newmemberwidget.php:50
|
||||
#: newmemberwidget.php:66
|
||||
msgid "Message"
|
||||
msgstr "Zpráva"
|
||||
|
||||
#: newmemberwidget.php:50
|
||||
#: newmemberwidget.php:66
|
||||
msgid "Your message for new members. You can use bbcode here."
|
||||
msgstr "Vaše zpráva pro nové členy. Zde můžete použít BBCode."
|
||||
|
||||
#: newmemberwidget.php:51
|
||||
#: newmemberwidget.php:67
|
||||
msgid "Add a link to global support forum"
|
||||
msgstr "Přidejte odkaz na globální fórum podpory"
|
||||
|
||||
#: newmemberwidget.php:51
|
||||
#: newmemberwidget.php:67
|
||||
msgid "Should a link to the global support forum be displayed?"
|
||||
msgstr "Má být odkaz na globální fórum podpory zobrazen?"
|
||||
msgstr "Má být zobrazen odkaz na globální fórum podpory?"
|
||||
|
||||
#: newmemberwidget.php:52
|
||||
#: newmemberwidget.php:68
|
||||
msgid "Add a link to the local support forum"
|
||||
msgstr "Přidejte odkaz na lokální fórum podpory"
|
||||
msgstr "Přidejte odkaz na místní fórum podpory"
|
||||
|
||||
#: newmemberwidget.php:52
|
||||
#: newmemberwidget.php:68
|
||||
msgid ""
|
||||
"If you have a local support forum and wand to have a link displayed in the "
|
||||
"If you have a local support forum and want to have a link displayed in the "
|
||||
"widget, check this box."
|
||||
msgstr "Pokud máte lokální fórum podpory a chcete mít zobrazen jeho odkaz, zvolte tuto volbu."
|
||||
msgstr ""
|
||||
|
||||
#: newmemberwidget.php:53
|
||||
#: newmemberwidget.php:69
|
||||
msgid "Name of the local support group"
|
||||
msgstr "Název lokálního fóra podpory"
|
||||
msgstr "Název místního fóra podpory"
|
||||
|
||||
#: newmemberwidget.php:53
|
||||
#: newmemberwidget.php:69
|
||||
msgid ""
|
||||
"If you checked the above, specify the <em>nickname</em> of the local support"
|
||||
" group here (i.e. helpers)"
|
||||
msgstr "Pokud jste výše uvedené zaškrtli, specifikujte zde <em>přezdívku</em> lokální podpůrné skupiny (např. pomahači)"
|
||||
msgstr "Pokud jste zaškrtl/a výše uvedenou možnost, specifikujte zde <em>přezdívku</em> místní skupiny podpory (např. pomocnici)"
|
||||
|
|
|
|||
|
|
@ -3,18 +3,17 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['New Member'] = 'Nový člen';
|
||||
$a->strings['Tips for New Members'] = 'Tipy pro nové členy';
|
||||
$a->strings['Global Support Forum'] = 'Globální fórum podpory';
|
||||
$a->strings['Local Support Forum'] = 'Lokální fórum podpory';
|
||||
$a->strings['Save Settings'] = 'Uložit Nastavení';
|
||||
$a->strings['Local Support Forum'] = 'Místní fórum podpory';
|
||||
$a->strings['Save Settings'] = 'Uložit nastavení';
|
||||
$a->strings['Message'] = 'Zpráva';
|
||||
$a->strings['Your message for new members. You can use bbcode here.'] = 'Vaše zpráva pro nové členy. Zde můžete použít BBCode.';
|
||||
$a->strings['Add a link to global support forum'] = 'Přidejte odkaz na globální fórum podpory';
|
||||
$a->strings['Should a link to the global support forum be displayed?'] = 'Má být odkaz na globální fórum podpory zobrazen?';
|
||||
$a->strings['Add a link to the local support forum'] = 'Přidejte odkaz na lokální fórum podpory';
|
||||
$a->strings['If you have a local support forum and wand to have a link displayed in the widget, check this box.'] = 'Pokud máte lokální fórum podpory a chcete mít zobrazen jeho odkaz, zvolte tuto volbu.';
|
||||
$a->strings['Name of the local support group'] = 'Název lokálního fóra podpory';
|
||||
$a->strings['If you checked the above, specify the <em>nickname</em> of the local support group here (i.e. helpers)'] = 'Pokud jste výše uvedené zaškrtli, specifikujte zde <em>přezdívku</em> lokální podpůrné skupiny (např. pomahači)';
|
||||
$a->strings['Should a link to the global support forum be displayed?'] = 'Má být zobrazen odkaz na globální fórum podpory?';
|
||||
$a->strings['Add a link to the local support forum'] = 'Přidejte odkaz na místní fórum podpory';
|
||||
$a->strings['Name of the local support group'] = 'Název místního fóra podpory';
|
||||
$a->strings['If you checked the above, specify the <em>nickname</em> of the local support group here (i.e. helpers)'] = 'Pokud jste zaškrtl/a výše uvedenou možnost, specifikujte zde <em>přezdívku</em> místní skupiny podpory (např. pomocnici)';
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-03-29 05:38+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:26+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:48+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:26+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2020-2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: newmemberwidget.php:29
|
||||
msgid "New Member"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['New Member'] = 'Nuovi Utenti';
|
||||
$a->strings['Tips for New Members'] = 'Consigli per i Nuovi Utenti';
|
||||
|
|
|
|||
|
|
@ -4,72 +4,73 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# a a <tgceph@gmail.com>, 2019
|
||||
# Jeroen De Meerleer <me@jeroened.be>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-01 14:12+0200\n"
|
||||
"PO-Revision-Date: 2018-08-24 13:40+0000\n"
|
||||
"Last-Translator: Jeroen De Meerleer <me@jeroened.be>\n"
|
||||
"Language-Team: Dutch (http://www.transifex.com/Friendica/friendica/language/nl/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:26+0000\n"
|
||||
"Last-Translator: a a <tgceph@gmail.com>, 2019\n"
|
||||
"Language-Team: Dutch (http://app.transifex.com/Friendica/friendica/language/nl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: nl\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: newmemberwidget.php:21
|
||||
#: newmemberwidget.php:29
|
||||
msgid "New Member"
|
||||
msgstr "Nieuw lid"
|
||||
|
||||
#: newmemberwidget.php:22
|
||||
#: newmemberwidget.php:30
|
||||
msgid "Tips for New Members"
|
||||
msgstr "Tips voor nieuwe leden"
|
||||
|
||||
#: newmemberwidget.php:24
|
||||
#: newmemberwidget.php:33
|
||||
msgid "Global Support Forum"
|
||||
msgstr ""
|
||||
|
||||
#: newmemberwidget.php:26
|
||||
#: newmemberwidget.php:37
|
||||
msgid "Local Support Forum"
|
||||
msgstr ""
|
||||
|
||||
#: newmemberwidget.php:49
|
||||
#: newmemberwidget.php:65
|
||||
msgid "Save Settings"
|
||||
msgstr "Instellingen opslaan"
|
||||
|
||||
#: newmemberwidget.php:50
|
||||
#: newmemberwidget.php:66
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
msgstr "Bericht"
|
||||
|
||||
#: newmemberwidget.php:50
|
||||
#: newmemberwidget.php:66
|
||||
msgid "Your message for new members. You can use bbcode here."
|
||||
msgstr ""
|
||||
msgstr "Uw bericht aan nieuwe leden. U kunt hier bbcode gebruiken."
|
||||
|
||||
#: newmemberwidget.php:51
|
||||
#: newmemberwidget.php:67
|
||||
msgid "Add a link to global support forum"
|
||||
msgstr ""
|
||||
|
||||
#: newmemberwidget.php:51
|
||||
#: newmemberwidget.php:67
|
||||
msgid "Should a link to the global support forum be displayed?"
|
||||
msgstr ""
|
||||
|
||||
#: newmemberwidget.php:52
|
||||
#: newmemberwidget.php:68
|
||||
msgid "Add a link to the local support forum"
|
||||
msgstr ""
|
||||
|
||||
#: newmemberwidget.php:52
|
||||
#: newmemberwidget.php:68
|
||||
msgid ""
|
||||
"If you have a local support forum and wand to have a link displayed in the "
|
||||
"If you have a local support forum and want to have a link displayed in the "
|
||||
"widget, check this box."
|
||||
msgstr ""
|
||||
|
||||
#: newmemberwidget.php:53
|
||||
#: newmemberwidget.php:69
|
||||
msgid "Name of the local support group"
|
||||
msgstr ""
|
||||
|
||||
#: newmemberwidget.php:53
|
||||
#: newmemberwidget.php:69
|
||||
msgid ""
|
||||
"If you checked the above, specify the <em>nickname</em> of the local support"
|
||||
" group here (i.e. helpers)"
|
||||
|
|
|
|||
|
|
@ -8,3 +8,5 @@ function string_plural_select_nl($n){
|
|||
$a->strings['New Member'] = 'Nieuw lid';
|
||||
$a->strings['Tips for New Members'] = 'Tips voor nieuwe leden';
|
||||
$a->strings['Save Settings'] = 'Instellingen opslaan';
|
||||
$a->strings['Message'] = 'Bericht';
|
||||
$a->strings['Your message for new members. You can use bbcode here.'] = 'Uw bericht aan nieuwe leden. U kunt hier bbcode gebruiken.';
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ function newmemberwidget_network_mod_init ($b)
|
|||
}
|
||||
|
||||
if (DI::config()->get('newmemberwidget','linklocalsupport', false)) {
|
||||
$t .= '<a href="'.DI::baseUrl()->get().'/profile/'.DI::config()->get('newmemberwidget','localsupport').'" target="_new">'.DI::l10n()->t('Local Support Forum').'</a><br />';
|
||||
$t .= '<a href="'.DI::baseUrl().'/profile/'.DI::config()->get('newmemberwidget','localsupport').'" target="_new">'.DI::l10n()->t('Local Support Forum').'</a><br />';
|
||||
}
|
||||
|
||||
$ft = DI::config()->get('newmemberwidget','freetext', '');
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ class NotifyAllEmail extends Email
|
|||
}
|
||||
|
||||
if (!$config->get('config', 'sender_email')) {
|
||||
$sender_email = 'noreply@' . $baseUrl->getHostname();
|
||||
$sender_email = 'noreply@' . $baseUrl->getHost();
|
||||
} else {
|
||||
$sender_email = $config->get('config', 'sender_email');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ msgstr ""
|
|||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2016-08-14 19:29+0000\n"
|
||||
"Last-Translator: Ulf Rompe <transifex.com@rompe.org>, 2019\n"
|
||||
"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2016-08-14 19:29+0000\n"
|
||||
"Last-Translator: Balázs Úr, 2021\n"
|
||||
"Language-Team: Hungarian (https://www.transifex.com/Friendica/teams/12172/hu/)\n"
|
||||
"Language-Team: Hungarian (https://app.transifex.com/Friendica/teams/12172/hu/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@ msgstr ""
|
|||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2016-08-14 19:29+0000\n"
|
||||
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>, 2017\n"
|
||||
"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: NotifyAllEmail.php:40
|
||||
#, php-format
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['%s Administrator'] = 'Amministratore %s';
|
||||
$a->strings['%1$s, %2$s Administrator'] = '%1$s, amministratore di %2$s';
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ function notifyall_module() {}
|
|||
|
||||
function notifyall_addon_admin(string &$o)
|
||||
{
|
||||
$o = '<div></div> <a href="' . DI::baseUrl()->get() . '/notifyall">' . DI::l10n()->t('Send email to all members') . '</a></br/>';
|
||||
$o = '<div></div> <a href="' . DI::baseUrl() . '/notifyall">' . DI::l10n()->t('Send email to all members') . '</a></br/>';
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -11,21 +11,17 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-04-01 11:11-0400\n"
|
||||
"PO-Revision-Date: 2018-08-16 10:09+0000\n"
|
||||
"Last-Translator: Aditoo\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2022-12-10 14:42-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:34+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: nsfw.php:77 nsfw.php:81
|
||||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Filtr obsahu (citlivý obsah a další)"
|
||||
|
||||
#: nsfw.php:85
|
||||
#: nsfw.php:65
|
||||
msgid ""
|
||||
"This addon searches for specified words/text in posts and collapses them. It"
|
||||
" can be used to filter content tagged with for instance #NSFW that may be "
|
||||
|
|
@ -33,32 +29,35 @@ msgid ""
|
|||
"is also useful for hiding irrelevant or annoying content from direct view."
|
||||
msgstr "Tento doplněk vyhledává specifikovaná slova/text v příspěvcích a skrývá je. Může být použit pro filtrování obsahu označeného štítky, jako například #NSFW, který může být považován za nevhodný v určitých časech či místech, například když jste v práci. Může být také užitečný ke skrývání nepodstatného či nepříjemného obsahu z přímého pohledu."
|
||||
|
||||
#: nsfw.php:86
|
||||
#: nsfw.php:66
|
||||
msgid "Enable Content filter"
|
||||
msgstr "Povolit filtr obsahu"
|
||||
|
||||
#: nsfw.php:89
|
||||
#: nsfw.php:67
|
||||
msgid "Comma separated list of keywords to hide"
|
||||
msgstr "Čárkou oddělený seznam klíčových slov ke skrytí"
|
||||
msgstr "Seznam klíčových slov ke skrytí, oddělených čárkami"
|
||||
|
||||
#: nsfw.php:93
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit nastavení"
|
||||
#: nsfw.php:67
|
||||
msgid ""
|
||||
"Use /expression/ to provide regular expressions, #tag to specfically match "
|
||||
"hashtags (case-insensitive), or regular words (case-sensitive)"
|
||||
msgstr ""
|
||||
|
||||
#: nsfw.php:94
|
||||
msgid "Use /expression/ to provide regular expressions"
|
||||
msgstr "Použijte /výraz/ pro použití regulárních výrazů"
|
||||
#: nsfw.php:72
|
||||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Filtr obsahu (citlivý obsah a další)"
|
||||
|
||||
#: nsfw.php:109
|
||||
msgid "NSFW Settings saved."
|
||||
msgstr "Nastavení NSFW uloženo"
|
||||
#: nsfw.php:96
|
||||
#, php-format
|
||||
msgid "Regular expression \"%s\" fails to compile"
|
||||
msgstr ""
|
||||
|
||||
#: nsfw.php:162
|
||||
#: nsfw.php:154
|
||||
#, php-format
|
||||
msgid "Filtered tag: %s"
|
||||
msgstr "Filtrovaná značka: %s"
|
||||
msgstr "Filtrovaný štítek: %s"
|
||||
|
||||
#: nsfw.php:164
|
||||
#: nsfw.php:156
|
||||
#, php-format
|
||||
msgid "Filtered word: %s"
|
||||
msgstr "Filtrované slovo: %s"
|
||||
|
|
|
|||
|
|
@ -5,12 +5,9 @@ function string_plural_select_cs($n){
|
|||
$n = intval($n);
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Filtr obsahu (citlivý obsah a další)';
|
||||
$a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Tento doplněk vyhledává specifikovaná slova/text v příspěvcích a skrývá je. Může být použit pro filtrování obsahu označeného štítky, jako například #NSFW, který může být považován za nevhodný v určitých časech či místech, například když jste v práci. Může být také užitečný ke skrývání nepodstatného či nepříjemného obsahu z přímého pohledu.';
|
||||
$a->strings['Enable Content filter'] = 'Povolit filtr obsahu';
|
||||
$a->strings['Comma separated list of keywords to hide'] = 'Čárkou oddělený seznam klíčových slov ke skrytí';
|
||||
$a->strings['Save Settings'] = 'Uložit nastavení';
|
||||
$a->strings['Use /expression/ to provide regular expressions'] = 'Použijte /výraz/ pro použití regulárních výrazů';
|
||||
$a->strings['NSFW Settings saved.'] = 'Nastavení NSFW uloženo';
|
||||
$a->strings['Filtered tag: %s'] = 'Filtrovaná značka: %s';
|
||||
$a->strings['Comma separated list of keywords to hide'] = 'Seznam klíčových slov ke skrytí, oddělených čárkami';
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Filtr obsahu (citlivý obsah a další)';
|
||||
$a->strings['Filtered tag: %s'] = 'Filtrovaný štítek: %s';
|
||||
$a->strings['Filtered word: %s'] = 'Filtrované slovo: %s';
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
# Translators:
|
||||
# Andreas H., 2014
|
||||
# hoergen <hoergen@hoergen.org>, 2018
|
||||
# foss <oss@disr.it>, 2022
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2022
|
||||
# Ulf Rompe <transifex.com@rompe.org>, 2019
|
||||
|
|
@ -13,10 +14,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-18 11:57-0500\n"
|
||||
"POT-Creation-Date: 2022-12-10 14:42-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:34+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2022\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"Last-Translator: foss <oss@disr.it>, 2022\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
@ -49,12 +50,17 @@ msgstr "Verwende /ausdruck/ für reguläre Ausdrücke, #tag um einen speziellen
|
|||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Inhaltsfilter (NSFW und mehr)"
|
||||
|
||||
#: nsfw.php:140
|
||||
#: nsfw.php:96
|
||||
#, php-format
|
||||
msgid "Regular expression \"%s\" fails to compile"
|
||||
msgstr "Regulärer Ausdruck \"%s\" schlägt beim Kompiliern fehl."
|
||||
|
||||
#: nsfw.php:154
|
||||
#, php-format
|
||||
msgid "Filtered tag: %s"
|
||||
msgstr "Gefiltertes Schlagwort: %s"
|
||||
|
||||
#: nsfw.php:142
|
||||
#: nsfw.php:156
|
||||
#, php-format
|
||||
msgid "Filtered word: %s"
|
||||
msgstr "Gefilterter Begriff: %s"
|
||||
|
|
|
|||
|
|
@ -10,5 +10,6 @@ $a->strings['Enable Content filter'] = 'Aktiviere den Inhaltsfilter';
|
|||
$a->strings['Comma separated list of keywords to hide'] = 'Durch Kommata getrennte Liste von Schlüsselwörtern, die verborgen werden sollen';
|
||||
$a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Verwende /ausdruck/ für reguläre Ausdrücke, #tag um einen speziellen Hashtag zu filtern (unabhängig von der Groß- und Kleinschreibung) oder einfache Wörter (Groß- und Kleinschreibung beachten).';
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Inhaltsfilter (NSFW und mehr)';
|
||||
$a->strings['Regular expression "%s" fails to compile'] = 'Regulärer Ausdruck "%s" schlägt beim Kompiliern fehl.';
|
||||
$a->strings['Filtered tag: %s'] = 'Gefiltertes Schlagwort: %s';
|
||||
$a->strings['Filtered word: %s'] = 'Gefilterter Begriff: %s';
|
||||
|
|
|
|||
|
|
@ -10,21 +10,17 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-04-06 01:49+0000\n"
|
||||
"Last-Translator: Senex Petrovic <javierruizo@hotmail.com>\n"
|
||||
"Language-Team: Spanish (http://www.transifex.com/Friendica/friendica/language/es/)\n"
|
||||
"POT-Creation-Date: 2022-12-10 14:42-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:34+0000\n"
|
||||
"Last-Translator: Senex Petrovic <javierruizo@hotmail.com>, 2021\n"
|
||||
"Language-Team: Spanish (http://app.transifex.com/Friendica/friendica/language/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: es\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: nsfw.php:68 nsfw.php:72
|
||||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Filtro de contenido (NSFW y más)"
|
||||
|
||||
#: nsfw.php:76
|
||||
#: nsfw.php:65
|
||||
msgid ""
|
||||
"This addon searches for specified words/text in posts and collapses them. It"
|
||||
" can be used to filter content tagged with for instance #NSFW that may be "
|
||||
|
|
@ -32,28 +28,35 @@ msgid ""
|
|||
"is also useful for hiding irrelevant or annoying content from direct view."
|
||||
msgstr "Este complemento busca palabras / texto específicos en las publicaciones y las contrae. Se puede utilizar para filtrar contenido etiquetado con, por ejemplo, #NSFW que puede considerarse inapropiado en determinados momentos o lugares, como en el trabajo. También es útil para ocultar contenido irrelevante o molesto de la vista directa."
|
||||
|
||||
#: nsfw.php:77
|
||||
#: nsfw.php:66
|
||||
msgid "Enable Content filter"
|
||||
msgstr "Habilitar filtro de contenido"
|
||||
|
||||
#: nsfw.php:80
|
||||
#: nsfw.php:67
|
||||
msgid "Comma separated list of keywords to hide"
|
||||
msgstr "Lista de palabras claves separadas por coma para colapsar el contenido correspondiente."
|
||||
|
||||
#: nsfw.php:84
|
||||
msgid "Save Settings"
|
||||
msgstr "Grabar ajustes"
|
||||
#: nsfw.php:67
|
||||
msgid ""
|
||||
"Use /expression/ to provide regular expressions, #tag to specfically match "
|
||||
"hashtags (case-insensitive), or regular words (case-sensitive)"
|
||||
msgstr ""
|
||||
|
||||
#: nsfw.php:85
|
||||
msgid "Use /expression/ to provide regular expressions"
|
||||
msgstr "Utiliza /expresión/ para proveer expresiones regulares."
|
||||
#: nsfw.php:72
|
||||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Filtro de contenido (NSFW y más)"
|
||||
|
||||
#: nsfw.php:152
|
||||
#: nsfw.php:96
|
||||
#, php-format
|
||||
msgid "Regular expression \"%s\" fails to compile"
|
||||
msgstr ""
|
||||
|
||||
#: nsfw.php:154
|
||||
#, php-format
|
||||
msgid "Filtered tag: %s"
|
||||
msgstr "Etiqueta filtrada: %s"
|
||||
|
||||
#: nsfw.php:154
|
||||
#: nsfw.php:156
|
||||
#, php-format
|
||||
msgid "Filtered word: %s"
|
||||
msgstr "Palabra filtrada: %s"
|
||||
|
|
|
|||
|
|
@ -3,13 +3,11 @@
|
|||
if(! function_exists("string_plural_select_es")) {
|
||||
function string_plural_select_es($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Filtro de contenido (NSFW y más)';
|
||||
$a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Este complemento busca palabras / texto específicos en las publicaciones y las contrae. Se puede utilizar para filtrar contenido etiquetado con, por ejemplo, #NSFW que puede considerarse inapropiado en determinados momentos o lugares, como en el trabajo. También es útil para ocultar contenido irrelevante o molesto de la vista directa.';
|
||||
$a->strings['Enable Content filter'] = 'Habilitar filtro de contenido';
|
||||
$a->strings['Comma separated list of keywords to hide'] = 'Lista de palabras claves separadas por coma para colapsar el contenido correspondiente.';
|
||||
$a->strings['Save Settings'] = 'Grabar ajustes';
|
||||
$a->strings['Use /expression/ to provide regular expressions'] = 'Utiliza /expresión/ para proveer expresiones regulares.';
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Filtro de contenido (NSFW y más)';
|
||||
$a->strings['Filtered tag: %s'] = 'Etiqueta filtrada: %s';
|
||||
$a->strings['Filtered word: %s'] = 'Palabra filtrada: %s';
|
||||
|
|
|
|||
|
|
@ -4,17 +4,17 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Nicolas Derive, 2022
|
||||
# Nicolas Derive, 2022-2023
|
||||
# StefOfficiel <pichard.stephane@free.fr>, 2015
|
||||
# Vincent Vindarel <vindarel@mailz.org>, 2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-18 11:57-0500\n"
|
||||
"POT-Creation-Date: 2022-12-10 14:42-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:34+0000\n"
|
||||
"Last-Translator: Nicolas Derive, 2022\n"
|
||||
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"Last-Translator: Nicolas Derive, 2022-2023\n"
|
||||
"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
@ -47,12 +47,17 @@ msgstr "Utiliser /expression/ pour fournir des expressions régulières, #tag po
|
|||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Filtre de contenu (NSFW et autres)"
|
||||
|
||||
#: nsfw.php:140
|
||||
#: nsfw.php:96
|
||||
#, php-format
|
||||
msgid "Regular expression \"%s\" fails to compile"
|
||||
msgstr "La compilation de l'expression régulière \"%s\" a échoué"
|
||||
|
||||
#: nsfw.php:154
|
||||
#, php-format
|
||||
msgid "Filtered tag: %s"
|
||||
msgstr "Tag filtré: %s"
|
||||
|
||||
#: nsfw.php:142
|
||||
#: nsfw.php:156
|
||||
#, php-format
|
||||
msgid "Filtered word: %s"
|
||||
msgstr "Mot filtré: %s"
|
||||
|
|
|
|||
|
|
@ -10,5 +10,6 @@ $a->strings['Enable Content filter'] = 'Activer le filtrage de contenu';
|
|||
$a->strings['Comma separated list of keywords to hide'] = 'Liste de mots-clés - séparés par des virgules - à cacher';
|
||||
$a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Utiliser /expression/ pour fournir des expressions régulières, #tag pour correspondre à un mot-dièse (hashtag, insensible à la casse), ou des mots classiques (sensible à la casse)';
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Filtre de contenu (NSFW et autres)';
|
||||
$a->strings['Regular expression "%s" fails to compile'] = 'La compilation de l\'expression régulière "%s" a échoué';
|
||||
$a->strings['Filtered tag: %s'] = 'Tag filtré: %s';
|
||||
$a->strings['Filtered word: %s'] = 'Mot filtré: %s';
|
||||
|
|
|
|||
|
|
@ -4,15 +4,15 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Balázs Úr, 2020-2022
|
||||
# Balázs Úr, 2020-2023
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-18 11:57-0500\n"
|
||||
"POT-Creation-Date: 2022-12-10 14:42-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:34+0000\n"
|
||||
"Last-Translator: Balázs Úr, 2020-2022\n"
|
||||
"Language-Team: Hungarian (http://www.transifex.com/Friendica/friendica/language/hu/)\n"
|
||||
"Last-Translator: Balázs Úr, 2020-2023\n"
|
||||
"Language-Team: Hungarian (http://app.transifex.com/Friendica/friendica/language/hu/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
@ -45,12 +45,17 @@ msgstr "Használjon /kifejezést/ reguláris kifejezések megadásához, #címk
|
|||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Tartalomszűrő (érzékeny tartalmak és egyebek)"
|
||||
|
||||
#: nsfw.php:140
|
||||
#: nsfw.php:96
|
||||
#, php-format
|
||||
msgid "Regular expression \"%s\" fails to compile"
|
||||
msgstr "A(z) „%s” reguláris kifejezés nem fordítható le"
|
||||
|
||||
#: nsfw.php:154
|
||||
#, php-format
|
||||
msgid "Filtered tag: %s"
|
||||
msgstr "Kiszűrt címke: %s"
|
||||
|
||||
#: nsfw.php:142
|
||||
#: nsfw.php:156
|
||||
#, php-format
|
||||
msgid "Filtered word: %s"
|
||||
msgstr "Kiszűrt szó: %s"
|
||||
|
|
|
|||
|
|
@ -10,5 +10,6 @@ $a->strings['Enable Content filter'] = 'Tartalomszűrő engedélyezése';
|
|||
$a->strings['Comma separated list of keywords to hide'] = 'Kulcsszavak vesszővel elválasztott listája az elrejtéshez';
|
||||
$a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Használjon /kifejezést/ reguláris kifejezések megadásához, #címkét a kettőskeresztescímkék kifejezett illesztéséhez (nem érzékeny a kis- és nagybetűkre) vagy szabályos szavakat (kis- és nagybetűérzékeny)';
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Tartalomszűrő (érzékeny tartalmak és egyebek)';
|
||||
$a->strings['Regular expression "%s" fails to compile'] = 'A(z) „%s” reguláris kifejezés nem fordítható le';
|
||||
$a->strings['Filtered tag: %s'] = 'Kiszűrt címke: %s';
|
||||
$a->strings['Filtered word: %s'] = 'Kiszűrt szó: %s';
|
||||
|
|
|
|||
|
|
@ -5,26 +5,22 @@
|
|||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2014-2015,2018
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2020
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2020,2023
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-04-01 11:11-0400\n"
|
||||
"PO-Revision-Date: 2020-09-17 11:25+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2022-12-10 14:42-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:34+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2020,2023\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: nsfw.php:77 nsfw.php:81
|
||||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Filtro Contenuto (NSFW e altro)"
|
||||
|
||||
#: nsfw.php:85
|
||||
#: nsfw.php:65
|
||||
msgid ""
|
||||
"This addon searches for specified words/text in posts and collapses them. It"
|
||||
" can be used to filter content tagged with for instance #NSFW that may be "
|
||||
|
|
@ -32,32 +28,35 @@ msgid ""
|
|||
"is also useful for hiding irrelevant or annoying content from direct view."
|
||||
msgstr "Questo componente aggiuntivo cerca per le parole specificate nei messaggi e li collassa. Può essere usato per filtrare contenuto taggato, per esempio, #NSFW (non sicuro per il lavoro), che può risultare inappropriato in certi orari o in certi luoghi, come appunto al lavoro. È anche utile per nascondere contenuto irrilevante o fastidioso."
|
||||
|
||||
#: nsfw.php:86
|
||||
#: nsfw.php:66
|
||||
msgid "Enable Content filter"
|
||||
msgstr "Abilita il Filtro Contenuti"
|
||||
|
||||
#: nsfw.php:89
|
||||
#: nsfw.php:67
|
||||
msgid "Comma separated list of keywords to hide"
|
||||
msgstr "Elenco separato da virgole di parole da nascondere"
|
||||
|
||||
#: nsfw.php:93
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
#: nsfw.php:67
|
||||
msgid ""
|
||||
"Use /expression/ to provide regular expressions, #tag to specfically match "
|
||||
"hashtags (case-insensitive), or regular words (case-sensitive)"
|
||||
msgstr "Usa /expression/ per fornire espressioni regolari, #tag per gli hashtag che coincidono specificatamente (insensibile alle maiuscole), o parole normali (sensibile alle maiuscole)"
|
||||
|
||||
#: nsfw.php:94
|
||||
msgid "Use /expression/ to provide regular expressions"
|
||||
msgstr "Utilizza /espressione/ per inserire espressioni regolari"
|
||||
#: nsfw.php:72
|
||||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Filtro Contenuto (NSFW e altro)"
|
||||
|
||||
#: nsfw.php:109
|
||||
msgid "NSFW Settings saved."
|
||||
msgstr "Impostazioni NSFW salvate."
|
||||
#: nsfw.php:96
|
||||
#, php-format
|
||||
msgid "Regular expression \"%s\" fails to compile"
|
||||
msgstr "L'espressione regolare \"%s\" fallisce la compilazione"
|
||||
|
||||
#: nsfw.php:162
|
||||
#: nsfw.php:154
|
||||
#, php-format
|
||||
msgid "Filtered tag: %s"
|
||||
msgstr "Tag filtrato: %s"
|
||||
|
||||
#: nsfw.php:164
|
||||
#: nsfw.php:156
|
||||
#, php-format
|
||||
msgid "Filtered word: %s"
|
||||
msgstr "Parola filtrata: %s"
|
||||
|
|
|
|||
|
|
@ -3,14 +3,13 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Filtro Contenuto (NSFW e altro)';
|
||||
$a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Questo componente aggiuntivo cerca per le parole specificate nei messaggi e li collassa. Può essere usato per filtrare contenuto taggato, per esempio, #NSFW (non sicuro per il lavoro), che può risultare inappropriato in certi orari o in certi luoghi, come appunto al lavoro. È anche utile per nascondere contenuto irrilevante o fastidioso.';
|
||||
$a->strings['Enable Content filter'] = 'Abilita il Filtro Contenuti';
|
||||
$a->strings['Comma separated list of keywords to hide'] = 'Elenco separato da virgole di parole da nascondere';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Use /expression/ to provide regular expressions'] = 'Utilizza /espressione/ per inserire espressioni regolari';
|
||||
$a->strings['NSFW Settings saved.'] = 'Impostazioni NSFW salvate.';
|
||||
$a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Usa /expression/ per fornire espressioni regolari, #tag per gli hashtag che coincidono specificatamente (insensibile alle maiuscole), o parole normali (sensibile alle maiuscole)';
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Filtro Contenuto (NSFW e altro)';
|
||||
$a->strings['Regular expression "%s" fails to compile'] = 'L\'espressione regolare "%s" fallisce la compilazione';
|
||||
$a->strings['Filtered tag: %s'] = 'Tag filtrato: %s';
|
||||
$a->strings['Filtered word: %s'] = 'Parola filtrata: %s';
|
||||
|
|
|
|||
|
|
@ -9,21 +9,17 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-04-01 11:11-0400\n"
|
||||
"PO-Revision-Date: 2020-09-01 05:38+0000\n"
|
||||
"Last-Translator: Alexander An <ravnina@gmail.com>\n"
|
||||
"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n"
|
||||
"POT-Creation-Date: 2022-12-10 14:42-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:34+0000\n"
|
||||
"Last-Translator: Alexander An <ravnina@gmail.com>, 2020\n"
|
||||
"Language-Team: Russian (http://app.transifex.com/Friendica/friendica/language/ru/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: ru\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||
|
||||
#: nsfw.php:77 nsfw.php:81
|
||||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Фильтр контента (NSFW и прочее)"
|
||||
|
||||
#: nsfw.php:85
|
||||
#: nsfw.php:65
|
||||
msgid ""
|
||||
"This addon searches for specified words/text in posts and collapses them. It"
|
||||
" can be used to filter content tagged with for instance #NSFW that may be "
|
||||
|
|
@ -31,32 +27,35 @@ msgid ""
|
|||
"is also useful for hiding irrelevant or annoying content from direct view."
|
||||
msgstr "Это дополнение ищет указанные слова и выражения в записях и сворачивает запись, если найдёт. Это можно использовать для скрытия записей с тэгом #NSFW, просмотр которых может быть нежелателен в определённое время, например, на работе. Так же можно использовать для скрытия иного контента."
|
||||
|
||||
#: nsfw.php:86
|
||||
#: nsfw.php:66
|
||||
msgid "Enable Content filter"
|
||||
msgstr "Включить фильтр контента"
|
||||
|
||||
#: nsfw.php:89
|
||||
#: nsfw.php:67
|
||||
msgid "Comma separated list of keywords to hide"
|
||||
msgstr "Ключевые слова для скрытия, через запятую"
|
||||
|
||||
#: nsfw.php:93
|
||||
msgid "Save Settings"
|
||||
msgstr "Сохранить настройки"
|
||||
#: nsfw.php:67
|
||||
msgid ""
|
||||
"Use /expression/ to provide regular expressions, #tag to specfically match "
|
||||
"hashtags (case-insensitive), or regular words (case-sensitive)"
|
||||
msgstr ""
|
||||
|
||||
#: nsfw.php:94
|
||||
msgid "Use /expression/ to provide regular expressions"
|
||||
msgstr "Используйте формат /expression/ для регулярных выражений"
|
||||
#: nsfw.php:72
|
||||
msgid "Content Filter (NSFW and more)"
|
||||
msgstr "Фильтр контента (NSFW и прочее)"
|
||||
|
||||
#: nsfw.php:109
|
||||
msgid "NSFW Settings saved."
|
||||
msgstr "Настройки NSFW сохранены"
|
||||
#: nsfw.php:96
|
||||
#, php-format
|
||||
msgid "Regular expression \"%s\" fails to compile"
|
||||
msgstr ""
|
||||
|
||||
#: nsfw.php:162
|
||||
#: nsfw.php:154
|
||||
#, php-format
|
||||
msgid "Filtered tag: %s"
|
||||
msgstr "Скрыт тэг: %s"
|
||||
|
||||
#: nsfw.php:164
|
||||
#: nsfw.php:156
|
||||
#, php-format
|
||||
msgid "Filtered word: %s"
|
||||
msgstr "Скрыто слово: %s"
|
||||
|
|
|
|||
|
|
@ -5,12 +5,9 @@ function string_plural_select_ru($n){
|
|||
$n = intval($n);
|
||||
if ($n%10==1 && $n%100!=11) { return 0; } else if ($n%10>=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Фильтр контента (NSFW и прочее)';
|
||||
$a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Это дополнение ищет указанные слова и выражения в записях и сворачивает запись, если найдёт. Это можно использовать для скрытия записей с тэгом #NSFW, просмотр которых может быть нежелателен в определённое время, например, на работе. Так же можно использовать для скрытия иного контента.';
|
||||
$a->strings['Enable Content filter'] = 'Включить фильтр контента';
|
||||
$a->strings['Comma separated list of keywords to hide'] = 'Ключевые слова для скрытия, через запятую';
|
||||
$a->strings['Save Settings'] = 'Сохранить настройки';
|
||||
$a->strings['Use /expression/ to provide regular expressions'] = 'Используйте формат /expression/ для регулярных выражений';
|
||||
$a->strings['NSFW Settings saved.'] = 'Настройки NSFW сохранены';
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Фильтр контента (NSFW и прочее)';
|
||||
$a->strings['Filtered tag: %s'] = 'Скрыт тэг: %s';
|
||||
$a->strings['Filtered word: %s'] = 'Скрыто слово: %s';
|
||||
|
|
|
|||
|
|
@ -10,28 +10,20 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2018-07-03 14:45+0000\n"
|
||||
"Last-Translator: Aditoo\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:58+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: numfriends.php:46
|
||||
msgid "Numfriends settings updated."
|
||||
msgstr "Nastavení Numfriends aktualizováno"
|
||||
#: numfriends.php:55
|
||||
msgid "How many contacts to display on profile sidebar"
|
||||
msgstr "Počet kontaktů k zobrazení na profilové postranní liště"
|
||||
|
||||
#: numfriends.php:77
|
||||
#: numfriends.php:60
|
||||
msgid "Numfriends Settings"
|
||||
msgstr "Nastavení Numfriends"
|
||||
|
||||
#: numfriends.php:79
|
||||
msgid "How many contacts to display on profile sidebar"
|
||||
msgstr "Kolik kontaktů zobrazit na profilové postranní liště"
|
||||
|
||||
#: numfriends.php:85
|
||||
msgid "Submit"
|
||||
msgstr "Odeslat"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,5 @@ function string_plural_select_cs($n){
|
|||
$n = intval($n);
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Numfriends settings updated.'] = 'Nastavení Numfriends aktualizováno';
|
||||
$a->strings['How many contacts to display on profile sidebar'] = 'Počet kontaktů k zobrazení na profilové postranní liště';
|
||||
$a->strings['Numfriends Settings'] = 'Nastavení Numfriends';
|
||||
$a->strings['How many contacts to display on profile sidebar'] = 'Kolik kontaktů zobrazit na profilové postranní liště';
|
||||
$a->strings['Submit'] = 'Odeslat';
|
||||
|
|
|
|||
|
|
@ -10,24 +10,20 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:44+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:58+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: numfriends.php:59
|
||||
msgid "Numfriends Settings"
|
||||
msgstr "Impostazioni Numfriends"
|
||||
|
||||
#: numfriends.php:61
|
||||
#: numfriends.php:55
|
||||
msgid "How many contacts to display on profile sidebar"
|
||||
msgstr "Quanti contatti visualizzare nella barra laterale del profilo"
|
||||
|
||||
#: numfriends.php:67
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
#: numfriends.php:60
|
||||
msgid "Numfriends Settings"
|
||||
msgstr "Impostazioni Numfriends"
|
||||
|
|
|
|||
|
|
@ -3,8 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Numfriends Settings'] = 'Impostazioni Numfriends';
|
||||
$a->strings['How many contacts to display on profile sidebar'] = 'Quanti contatti visualizzare nella barra laterale del profilo';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Numfriends Settings'] = 'Impostazioni Numfriends';
|
||||
|
|
|
|||
|
|
@ -4,43 +4,63 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014-2015
|
||||
# Aditoo, 2018
|
||||
# michal_s <msupler@gmail.com>, 2014-2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2015-02-11 19:39+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:01+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: openstreetmap.php:94
|
||||
#: openstreetmap.php:167
|
||||
msgid "View Larger"
|
||||
msgstr ""
|
||||
|
||||
#: openstreetmap.php:194
|
||||
msgid "Submit"
|
||||
msgstr "Odeslat"
|
||||
|
||||
#: openstreetmap.php:95
|
||||
#: openstreetmap.php:195
|
||||
msgid "Tile Server URL"
|
||||
msgstr "URL adresa Tile serveru"
|
||||
|
||||
#: openstreetmap.php:95
|
||||
#: openstreetmap.php:195
|
||||
msgid ""
|
||||
"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
|
||||
"target=\"_blank\">public tile servers</a>"
|
||||
msgstr "Seznam <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">veřejných tile serverů</a>"
|
||||
"target=\"_blank\" rel=\"noopener noreferrer\">public tile servers</a>"
|
||||
msgstr ""
|
||||
|
||||
#: openstreetmap.php:96
|
||||
#: openstreetmap.php:196
|
||||
msgid "Nominatim (reverse geocoding) Server URL"
|
||||
msgstr ""
|
||||
|
||||
#: openstreetmap.php:196
|
||||
msgid ""
|
||||
"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
|
||||
"target=\"_blank\" rel=\"noopener noreferrer\">Nominatim servers</a>"
|
||||
msgstr ""
|
||||
|
||||
#: openstreetmap.php:197
|
||||
msgid "Default zoom"
|
||||
msgstr "Defaultní lupa"
|
||||
msgstr "Výchozí zvětšení"
|
||||
|
||||
#: openstreetmap.php:96
|
||||
msgid "The default zoom level. (1:world, 18:highest)"
|
||||
msgstr "Defaultní nastavení lupy (1:svět, 18:nejvyšší)"
|
||||
#: openstreetmap.php:197
|
||||
msgid ""
|
||||
"The default zoom level. (1:world, 18:highest, also depends on tile server)"
|
||||
msgstr ""
|
||||
|
||||
#: openstreetmap.php:104
|
||||
msgid "Settings updated."
|
||||
msgstr "Nastavení aktualizováno."
|
||||
#: openstreetmap.php:198
|
||||
msgid "Include marker on map"
|
||||
msgstr ""
|
||||
|
||||
#: openstreetmap.php:198
|
||||
msgid "Include a marker on the map."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -3,11 +3,8 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Submit'] = 'Odeslat';
|
||||
$a->strings['Tile Server URL'] = 'URL adresa Tile serveru';
|
||||
$a->strings['A list of <a href="http://wiki.openstreetmap.org/wiki/TMS" target="_blank">public tile servers</a>'] = 'Seznam <a href="http://wiki.openstreetmap.org/wiki/TMS" target="_blank">veřejných tile serverů</a>';
|
||||
$a->strings['Default zoom'] = 'Defaultní lupa';
|
||||
$a->strings['The default zoom level. (1:world, 18:highest)'] = 'Defaultní nastavení lupy (1:svět, 18:nejvyšší)';
|
||||
$a->strings['Settings updated.'] = 'Nastavení aktualizováno.';
|
||||
$a->strings['Default zoom'] = 'Výchozí zvětšení';
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-12-13 05:55+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:01+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ function openstreetmap_load_config(ConfigFileManager $loader)
|
|||
|
||||
function openstreetmap_alterheader(&$navHtml)
|
||||
{
|
||||
$addScriptTag = '<script type="text/javascript" src="' . DI::baseUrl()->get() . '/addon/openstreetmap/openstreetmap.js"></script>' . "\r\n";
|
||||
$addScriptTag = '<script type="text/javascript" src="' . DI::baseUrl() . '/addon/openstreetmap/openstreetmap.js"></script>' . "\r\n";
|
||||
DI::page()['htmlhead'] .= $addScriptTag;
|
||||
}
|
||||
|
||||
|
|
@ -145,7 +145,7 @@ function openstreetmap_generate_map(array &$b)
|
|||
{
|
||||
$tmsserver = DI::config()->get('openstreetmap', 'tmsserver', OSM_TMS);
|
||||
|
||||
if (strpos(DI::baseUrl()->get(true), 'https:') !== false) {
|
||||
if (strpos(DI::baseUrl(), 'https:') !== false) {
|
||||
$tmsserver = str_replace('http:','https:',$tmsserver);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,40 +4,37 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Lorem Ipsum <aditoo@seznam.cz>, 2018
|
||||
# Aditoo, 2018
|
||||
# Aditoo, 2018
|
||||
# michal_s <msupler@gmail.com>, 2014-2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-03-11 18:52+0100\n"
|
||||
"PO-Revision-Date: 2018-06-10 09:12+0000\n"
|
||||
"Last-Translator: Lorem Ipsum <aditoo@seznam.cz>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:17+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: pageheader.php:53
|
||||
#: pageheader.php:36
|
||||
msgid "\"pageheader\" Settings"
|
||||
msgstr "Nastavení záhlaví stránky"
|
||||
|
||||
#: pageheader.php:54
|
||||
#: pageheader.php:37
|
||||
msgid "Message"
|
||||
msgstr "Zpráva"
|
||||
|
||||
#: pageheader.php:54
|
||||
#: pageheader.php:37
|
||||
msgid ""
|
||||
"Message to display on every page on this server (or put a pageheader.html "
|
||||
"file in your docroot)"
|
||||
msgstr "Zpráva, která má být zobrazena na každé stránce tohoto serveru (nebo vložte soubor pageheader.html do kořenové složky Vašeho serveru)"
|
||||
msgstr "Zpráva, která má být zobrazena na každé stránce tohoto serveru (nebo vložte do kořenové složky Vašeho serveru soubor pageheader.html)"
|
||||
|
||||
#: pageheader.php:55
|
||||
#: pageheader.php:38
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit nastavení"
|
||||
|
||||
#: pageheader.php:69
|
||||
msgid "pageheader Settings saved."
|
||||
msgstr "Nastavení záhlaví stránky uloženo."
|
||||
|
|
|
|||
|
|
@ -7,6 +7,5 @@ function string_plural_select_cs($n){
|
|||
}}
|
||||
$a->strings['"pageheader" Settings'] = 'Nastavení záhlaví stránky';
|
||||
$a->strings['Message'] = 'Zpráva';
|
||||
$a->strings['Message to display on every page on this server (or put a pageheader.html file in your docroot)'] = 'Zpráva, která má být zobrazena na každé stránce tohoto serveru (nebo vložte soubor pageheader.html do kořenové složky Vašeho serveru)';
|
||||
$a->strings['Message to display on every page on this server (or put a pageheader.html file in your docroot)'] = 'Zpráva, která má být zobrazena na každé stránce tohoto serveru (nebo vložte do kořenové složky Vašeho serveru soubor pageheader.html)';
|
||||
$a->strings['Save Settings'] = 'Uložit nastavení';
|
||||
$a->strings['pageheader Settings saved.'] = 'Nastavení záhlaví stránky uloženo.';
|
||||
|
|
|
|||
|
|
@ -9,34 +9,30 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-03-11 18:52+0100\n"
|
||||
"PO-Revision-Date: 2018-03-19 13:19+0000\n"
|
||||
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:17+0000\n"
|
||||
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>, 2014-2015,2018\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: pageheader.php:53
|
||||
#: pageheader.php:36
|
||||
msgid "\"pageheader\" Settings"
|
||||
msgstr "Impostazioni \"Intestazione pagina\""
|
||||
|
||||
#: pageheader.php:54
|
||||
#: pageheader.php:37
|
||||
msgid "Message"
|
||||
msgstr "Messaggio"
|
||||
|
||||
#: pageheader.php:54
|
||||
#: pageheader.php:37
|
||||
msgid ""
|
||||
"Message to display on every page on this server (or put a pageheader.html "
|
||||
"file in your docroot)"
|
||||
msgstr "Il messaggio da mostrare su ogni pagina di questo server (puoi anche aggiungere un file pageheader.html nella root)"
|
||||
|
||||
#: pageheader.php:55
|
||||
#: pageheader.php:38
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: pageheader.php:69
|
||||
msgid "pageheader Settings saved."
|
||||
msgstr "Impostazioni \"Intestazione pagina\" salvate."
|
||||
|
|
|
|||
|
|
@ -3,10 +3,9 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['"pageheader" Settings'] = 'Impostazioni "Intestazione pagina"';
|
||||
$a->strings['Message'] = 'Messaggio';
|
||||
$a->strings['Message to display on every page on this server (or put a pageheader.html file in your docroot)'] = 'Il messaggio da mostrare su ogni pagina di questo server (puoi anche aggiungere un file pageheader.html nella root)';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['pageheader Settings saved.'] = 'Impostazioni "Intestazione pagina" salvate.';
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-05-23 19:52+0000\n"
|
||||
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:18+0000\n"
|
||||
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -10,23 +10,23 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-02-19 10:42+0100\n"
|
||||
"PO-Revision-Date: 2020-09-17 11:39+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:18+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2020\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: piwik.php:94
|
||||
#: piwik.php:87
|
||||
msgid ""
|
||||
"This website is tracked using the <a href='http://www.matomo.org'>Matomo</a>"
|
||||
" analytics tool."
|
||||
msgstr "Questo sito è monitorato con lo strumento di analisi <a href='http://www.matomo.org'>Matomo</a>."
|
||||
|
||||
#: piwik.php:97
|
||||
#: piwik.php:90
|
||||
#, php-format
|
||||
msgid ""
|
||||
"If you do not want that your visits are logged in this way you <a "
|
||||
|
|
@ -34,32 +34,28 @@ msgid ""
|
|||
"visits of the site</a> (opt-out)."
|
||||
msgstr "Se non vuoi che le tue visite vengano registrate in questo modo è possibile <a href='%s'>impostare un cookie per evitare che Matomo / Piwik rintracci ulteriori visite del sito</a> (opt-out)."
|
||||
|
||||
#: piwik.php:104
|
||||
#: piwik.php:97
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: piwik.php:105
|
||||
#: piwik.php:98
|
||||
msgid "Matomo (Piwik) Base URL"
|
||||
msgstr "Indirizzo di base di Matomo (Piwik)"
|
||||
|
||||
#: piwik.php:105
|
||||
#: piwik.php:98
|
||||
msgid ""
|
||||
"Absolute path to your Matomo (Piwik) installation. (without protocol "
|
||||
"(http/s), with trailing slash)"
|
||||
msgstr "Percorso assoluto alla tua installazione di Matomo (Piwik) (senza il protocollo (http/https), con la barra alla fine)"
|
||||
|
||||
#: piwik.php:106
|
||||
#: piwik.php:99
|
||||
msgid "Site ID"
|
||||
msgstr "ID del sito"
|
||||
|
||||
#: piwik.php:107
|
||||
#: piwik.php:100
|
||||
msgid "Show opt-out cookie link?"
|
||||
msgstr "Mostra il collegamento per l'opt-out dei cookie?"
|
||||
|
||||
#: piwik.php:108
|
||||
#: piwik.php:101
|
||||
msgid "Asynchronous tracking"
|
||||
msgstr "Tracciamento asincrono"
|
||||
|
||||
#: piwik.php:120
|
||||
msgid "Settings updated."
|
||||
msgstr "Impostazioni aggiornate."
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['This website is tracked using the <a href=\'http://www.matomo.org\'>Matomo</a> analytics tool.'] = 'Questo sito è monitorato con lo strumento di analisi <a href=\'http://www.matomo.org\'>Matomo</a>.';
|
||||
$a->strings['If you do not want that your visits are logged in this way you <a href=\'%s\'>can set a cookie to prevent Matomo / Piwik from tracking further visits of the site</a> (opt-out).'] = 'Se non vuoi che le tue visite vengano registrate in questo modo è possibile <a href=\'%s\'>impostare un cookie per evitare che Matomo / Piwik rintracci ulteriori visite del sito</a> (opt-out).';
|
||||
|
|
@ -13,4 +13,3 @@ $a->strings['Absolute path to your Matomo (Piwik) installation. (without protoco
|
|||
$a->strings['Site ID'] = 'ID del sito';
|
||||
$a->strings['Show opt-out cookie link?'] = 'Mostra il collegamento per l\'opt-out dei cookie?';
|
||||
$a->strings['Asynchronous tracking'] = 'Tracciamento asincrono';
|
||||
$a->strings['Settings updated.'] = 'Impostazioni aggiornate.';
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ function piwik_analytics(string &$b)
|
|||
* associated CSS file. We just have to tell Friendica to get it
|
||||
* into the page header.
|
||||
*/
|
||||
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl()->get() . '/addon/piwik/piwik.css' . '" media="all" />';
|
||||
DI::page()['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . DI::baseUrl() . '/addon/piwik/piwik.css' . '" media="all" />';
|
||||
|
||||
/*
|
||||
* Get the configuration values.
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 16:22+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:19+0000\n"
|
||||
"Last-Translator: Steffen K9, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -10,28 +10,20 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:56+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:19+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: planets.php:131 planets.php:135
|
||||
msgid "Planets"
|
||||
msgstr "Pianeti"
|
||||
|
||||
#: planets.php:139
|
||||
msgid "Planets Settings"
|
||||
msgstr "Impostazioni \"Pianeti\""
|
||||
|
||||
#: planets.php:141
|
||||
#: planets.php:126
|
||||
msgid "Enable Planets Addon"
|
||||
msgstr "Abilita il componente aggiuntivo Pianeti"
|
||||
|
||||
#: planets.php:147
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
#: planets.php:131
|
||||
msgid "Planets Settings"
|
||||
msgstr "Impostazioni \"Pianeti\""
|
||||
|
|
|
|||
|
|
@ -3,9 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Planets'] = 'Pianeti';
|
||||
$a->strings['Planets Settings'] = 'Impostazioni "Pianeti"';
|
||||
$a->strings['Enable Planets Addon'] = 'Abilita il componente aggiuntivo Pianeti';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Planets Settings'] = 'Impostazioni "Pianeti"';
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-05-23 19:49+0000\n"
|
||||
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:24+0000\n"
|
||||
"Last-Translator: Till Mohr <tmtrfx@till-mohr.de>, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:57+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:24+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: public_server.php:64
|
||||
msgid "Administrator"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Administrator'] = 'Amministratore';
|
||||
$a->strings['Your account on %s will expire in a few days.'] = 'Il tuo account su %s scadrà tra pochi giorni.';
|
||||
|
|
|
|||
|
|
@ -59,8 +59,8 @@ function public_server_cron($b)
|
|||
'uid' => $rr['uid'],
|
||||
'system_type' => 'public_server_expire',
|
||||
'source_name' => DI::l10n()->t('Administrator'),
|
||||
'source_link' => DI::baseUrl()->get(),
|
||||
'source_photo' => DI::baseUrl()->get() . '/images/person-80.jpg',
|
||||
'source_link' => DI::baseUrl(),
|
||||
'source_photo' => DI::baseUrl() . '/images/person-80.jpg',
|
||||
]);
|
||||
|
||||
$fields = ['expire_notification_sent' => DateTimeFormat::utcNow()];
|
||||
|
|
@ -104,7 +104,7 @@ function public_server_enotify(array &$b)
|
|||
{
|
||||
if (!empty($b['params']) && $b['params']['type'] == Notification\Type::SYSTEM
|
||||
&& !empty($b['params']['system_type']) && $b['params']['system_type'] === 'public_server_expire') {
|
||||
$b['itemlink'] = DI::baseUrl()->get();
|
||||
$b['itemlink'] = DI::baseUrl();
|
||||
$b['epreamble'] = $b['preamble'] = DI::l10n()->t('Your account on %s will expire in a few days.', DI::config()->get('system', 'sitename'));
|
||||
$b['subject'] = DI::l10n()->t('Your Friendica account is about to expire.');
|
||||
$b['body'] = DI::l10n()->t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days", $b['params']['to_name'], "[url=" . DI::config()->get('system', 'url') . "]" . DI::config()->get('config', 'sitename') . "[/url]");
|
||||
|
|
|
|||
|
|
@ -10,94 +10,86 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-23 14:45+0200\n"
|
||||
"PO-Revision-Date: 2018-06-11 19:43+0000\n"
|
||||
"Last-Translator: Aditoo\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:30+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: pumpio.php:38
|
||||
#: pumpio.php:57
|
||||
msgid "Permission denied."
|
||||
msgstr "Přístup odmítnut."
|
||||
|
||||
#: pumpio.php:124
|
||||
#: pumpio.php:152
|
||||
#, php-format
|
||||
msgid "Unable to register the client at the pump.io server '%s'."
|
||||
msgstr "Nebylo možné registrovat klienta na pump.io serveru '%s'."
|
||||
msgstr "Nebylo možné registrovat klienta na serveru pump.io \"%s\"."
|
||||
|
||||
#: pumpio.php:164
|
||||
#: pumpio.php:192
|
||||
msgid "You are now authenticated to pumpio."
|
||||
msgstr "Nyní jste přihlášen k pumpio."
|
||||
msgstr "Nyní jste přihlášen/a na pump.io."
|
||||
|
||||
#: pumpio.php:165
|
||||
#: pumpio.php:193
|
||||
msgid "return to the connector page"
|
||||
msgstr "návrat ke stránce konektor"
|
||||
msgstr "návrat na stránku konektoru"
|
||||
|
||||
#: pumpio.php:183
|
||||
#: pumpio.php:213
|
||||
msgid "Post to pumpio"
|
||||
msgstr "Příspěvek na pumpio"
|
||||
msgstr "Posílat na pump.io"
|
||||
|
||||
#: pumpio.php:221 pumpio.php:225
|
||||
msgid "Pump.io Import/Export/Mirror"
|
||||
msgstr "Pump.oi Import/Export/Zrcadlení"
|
||||
#: pumpio.php:237
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit nastavení"
|
||||
|
||||
#: pumpio.php:229
|
||||
msgid "pump.io username (without the servername)"
|
||||
msgstr "uživatelské jméno pump.io (bez jména serveru)"
|
||||
#: pumpio.php:239
|
||||
msgid "Delete this preset"
|
||||
msgstr ""
|
||||
|
||||
#: pumpio.php:234
|
||||
msgid "pump.io servername (without \"http://\" or \"https://\" )"
|
||||
msgstr "jméno serveru pump.io (bez \"http://\" nebo \"https://\" )"
|
||||
|
||||
#: pumpio.php:246
|
||||
#: pumpio.php:245
|
||||
msgid "Authenticate your pump.io connection"
|
||||
msgstr "Přihlásit ke spojení na pump.io"
|
||||
|
||||
#: pumpio.php:250
|
||||
#: pumpio.php:252
|
||||
msgid "Pump.io servername (without \"http://\" or \"https://\" )"
|
||||
msgstr ""
|
||||
|
||||
#: pumpio.php:253
|
||||
msgid "Pump.io username (without the servername)"
|
||||
msgstr ""
|
||||
|
||||
#: pumpio.php:254
|
||||
msgid "Import the remote timeline"
|
||||
msgstr "Importovat vzdálenou časovou osu"
|
||||
|
||||
#: pumpio.php:255
|
||||
msgid "Enable pump.io Post Addon"
|
||||
msgstr "Povolit doplněk pumo.io Post"
|
||||
msgid "Enable Pump.io Post Addon"
|
||||
msgstr ""
|
||||
|
||||
#: pumpio.php:260
|
||||
msgid "Post to pump.io by default"
|
||||
msgstr "Posílat příspěvky na pump.io automaticky"
|
||||
#: pumpio.php:256
|
||||
msgid "Post to Pump.io by default"
|
||||
msgstr ""
|
||||
|
||||
#: pumpio.php:265
|
||||
#: pumpio.php:257
|
||||
msgid "Should posts be public?"
|
||||
msgstr "Mají být příspěvky veřejné?"
|
||||
|
||||
#: pumpio.php:270
|
||||
#: pumpio.php:258
|
||||
msgid "Mirror all public posts"
|
||||
msgstr "Zrcadlit všechny veřejné příspěvky"
|
||||
|
||||
#: pumpio.php:275
|
||||
msgid "Check to delete this preset"
|
||||
msgstr "Zaškrtnout pro smazání tohoto nastavení"
|
||||
#: pumpio.php:263
|
||||
msgid "Pump.io Import/Export/Mirror"
|
||||
msgstr "Import/Export/Zrcadlení Pump.io"
|
||||
|
||||
#: pumpio.php:285
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit Nastavení"
|
||||
|
||||
#: pumpio.php:515
|
||||
msgid "Pump.io post failed. Queued for retry."
|
||||
msgstr "Zaslání příspěvku na Pump.io selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání."
|
||||
|
||||
#: pumpio.php:587
|
||||
msgid "Pump.io like failed. Queued for retry."
|
||||
msgstr "Zaslání příspěvku na Pump.io zřejmě selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání."
|
||||
|
||||
#: pumpio.php:875
|
||||
#: pumpio.php:920
|
||||
msgid "status"
|
||||
msgstr "stav"
|
||||
|
||||
#: pumpio.php:879
|
||||
#: pumpio.php:924
|
||||
#, php-format
|
||||
msgid "%1$s likes %2$s's %3$s"
|
||||
msgstr "%1$s se líbí %3$s %2$s"
|
||||
msgstr "Uživateli %1$s se líbí %3$s uživatele %2$s"
|
||||
|
|
|
|||
|
|
@ -6,22 +6,15 @@ function string_plural_select_cs($n){
|
|||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Permission denied.'] = 'Přístup odmítnut.';
|
||||
$a->strings['Unable to register the client at the pump.io server \'%s\'.'] = 'Nebylo možné registrovat klienta na pump.io serveru \'%s\'.';
|
||||
$a->strings['You are now authenticated to pumpio.'] = 'Nyní jste přihlášen k pumpio.';
|
||||
$a->strings['return to the connector page'] = 'návrat ke stránce konektor';
|
||||
$a->strings['Post to pumpio'] = 'Příspěvek na pumpio';
|
||||
$a->strings['Pump.io Import/Export/Mirror'] = 'Pump.oi Import/Export/Zrcadlení';
|
||||
$a->strings['pump.io username (without the servername)'] = 'uživatelské jméno pump.io (bez jména serveru)';
|
||||
$a->strings['pump.io servername (without "http://" or "https://" )'] = 'jméno serveru pump.io (bez "http://" nebo "https://" )';
|
||||
$a->strings['Unable to register the client at the pump.io server \'%s\'.'] = 'Nebylo možné registrovat klienta na serveru pump.io "%s".';
|
||||
$a->strings['You are now authenticated to pumpio.'] = 'Nyní jste přihlášen/a na pump.io.';
|
||||
$a->strings['return to the connector page'] = 'návrat na stránku konektoru';
|
||||
$a->strings['Post to pumpio'] = 'Posílat na pump.io';
|
||||
$a->strings['Save Settings'] = 'Uložit nastavení';
|
||||
$a->strings['Authenticate your pump.io connection'] = 'Přihlásit ke spojení na pump.io';
|
||||
$a->strings['Import the remote timeline'] = 'Importovat vzdálenou časovou osu';
|
||||
$a->strings['Enable pump.io Post Addon'] = 'Povolit doplněk pumo.io Post';
|
||||
$a->strings['Post to pump.io by default'] = 'Posílat příspěvky na pump.io automaticky';
|
||||
$a->strings['Should posts be public?'] = 'Mají být příspěvky veřejné?';
|
||||
$a->strings['Mirror all public posts'] = 'Zrcadlit všechny veřejné příspěvky';
|
||||
$a->strings['Check to delete this preset'] = 'Zaškrtnout pro smazání tohoto nastavení';
|
||||
$a->strings['Save Settings'] = 'Uložit Nastavení';
|
||||
$a->strings['Pump.io post failed. Queued for retry.'] = 'Zaslání příspěvku na Pump.io selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání.';
|
||||
$a->strings['Pump.io like failed. Queued for retry.'] = 'Zaslání příspěvku na Pump.io zřejmě selhalo. Příspěvek byl zařazen do fronty pro opakované odeslání.';
|
||||
$a->strings['Pump.io Import/Export/Mirror'] = 'Import/Export/Zrcadlení Pump.io';
|
||||
$a->strings['status'] = 'stav';
|
||||
$a->strings['%1$s likes %2$s\'s %3$s'] = '%1$s se líbí %3$s %2$s';
|
||||
$a->strings['%1$s likes %2$s\'s %3$s'] = 'Uživateli %1$s se líbí %3$s uživatele %2$s';
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2022-01-22 17:36+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:30+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2022\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -5,98 +5,91 @@
|
|||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2014,2018
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2023
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-23 14:45+0200\n"
|
||||
"PO-Revision-Date: 2018-03-19 13:25+0000\n"
|
||||
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 11:30+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2023\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: pumpio.php:38
|
||||
#: pumpio.php:57
|
||||
msgid "Permission denied."
|
||||
msgstr "Permesso negato."
|
||||
|
||||
#: pumpio.php:124
|
||||
#: pumpio.php:152
|
||||
#, php-format
|
||||
msgid "Unable to register the client at the pump.io server '%s'."
|
||||
msgstr "Impossibile registrare il client sul server pump.io '%s'"
|
||||
|
||||
#: pumpio.php:164
|
||||
#: pumpio.php:192
|
||||
msgid "You are now authenticated to pumpio."
|
||||
msgstr "Sei autenticato su pump.io"
|
||||
|
||||
#: pumpio.php:165
|
||||
#: pumpio.php:193
|
||||
msgid "return to the connector page"
|
||||
msgstr "ritorna alla pagina del connettore"
|
||||
|
||||
#: pumpio.php:183
|
||||
#: pumpio.php:213
|
||||
msgid "Post to pumpio"
|
||||
msgstr "Invia a pump.io"
|
||||
|
||||
#: pumpio.php:221 pumpio.php:225
|
||||
msgid "Pump.io Import/Export/Mirror"
|
||||
msgstr "Esporta/Importa/Clona pump.io"
|
||||
#: pumpio.php:237
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: pumpio.php:229
|
||||
msgid "pump.io username (without the servername)"
|
||||
msgstr "nome utente pump.io (senza il nome del server)"
|
||||
#: pumpio.php:239
|
||||
msgid "Delete this preset"
|
||||
msgstr "Elimina questa preimpostazione"
|
||||
|
||||
#: pumpio.php:234
|
||||
msgid "pump.io servername (without \"http://\" or \"https://\" )"
|
||||
msgstr "nome del server pump.io (senza \"http://\" o \"https://\")"
|
||||
|
||||
#: pumpio.php:246
|
||||
#: pumpio.php:245
|
||||
msgid "Authenticate your pump.io connection"
|
||||
msgstr "Autentica la tua connessione pump.io"
|
||||
|
||||
#: pumpio.php:250
|
||||
#: pumpio.php:252
|
||||
msgid "Pump.io servername (without \"http://\" or \"https://\" )"
|
||||
msgstr "Nome server Pump.io (senza \"http://\" o \"https://\" )"
|
||||
|
||||
#: pumpio.php:253
|
||||
msgid "Pump.io username (without the servername)"
|
||||
msgstr "Nome utente Pump.io (senza nome server)"
|
||||
|
||||
#: pumpio.php:254
|
||||
msgid "Import the remote timeline"
|
||||
msgstr "Importa la timeline remota"
|
||||
|
||||
#: pumpio.php:255
|
||||
msgid "Enable pump.io Post Addon"
|
||||
msgstr "Abilita il componente aggiuntivo di invio ad pump.io"
|
||||
msgid "Enable Pump.io Post Addon"
|
||||
msgstr "Abilita componente aggiuntivo di pubblicazione Pump.io"
|
||||
|
||||
#: pumpio.php:260
|
||||
msgid "Post to pump.io by default"
|
||||
msgstr "Invia sempre a pump.io"
|
||||
#: pumpio.php:256
|
||||
msgid "Post to Pump.io by default"
|
||||
msgstr "Pubblica su Pump.io per impostazione predefinita"
|
||||
|
||||
#: pumpio.php:265
|
||||
#: pumpio.php:257
|
||||
msgid "Should posts be public?"
|
||||
msgstr "I messaggi devono essere pubblici?"
|
||||
|
||||
#: pumpio.php:270
|
||||
#: pumpio.php:258
|
||||
msgid "Mirror all public posts"
|
||||
msgstr "Clona tutti i messaggi pubblici"
|
||||
|
||||
#: pumpio.php:275
|
||||
msgid "Check to delete this preset"
|
||||
msgstr "Seleziona per elimiare queto preset"
|
||||
#: pumpio.php:263
|
||||
msgid "Pump.io Import/Export/Mirror"
|
||||
msgstr "Esporta/Importa/Clona pump.io"
|
||||
|
||||
#: pumpio.php:285
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: pumpio.php:515
|
||||
msgid "Pump.io post failed. Queued for retry."
|
||||
msgstr "Invio a pump.io fallito. In attesa di riprovare."
|
||||
|
||||
#: pumpio.php:587
|
||||
msgid "Pump.io like failed. Queued for retry."
|
||||
msgstr "Invio 'mi piace' a pump.io fallito. In attesa di riprovare."
|
||||
|
||||
#: pumpio.php:875
|
||||
#: pumpio.php:920
|
||||
msgid "status"
|
||||
msgstr "stato"
|
||||
|
||||
#: pumpio.php:879
|
||||
#: pumpio.php:924
|
||||
#, php-format
|
||||
msgid "%1$s likes %2$s's %3$s"
|
||||
msgstr "a %1$s piace %2$s di %3$s"
|
||||
|
|
|
|||
|
|
@ -3,25 +3,23 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Permission denied.'] = 'Permesso negato.';
|
||||
$a->strings['Unable to register the client at the pump.io server \'%s\'.'] = 'Impossibile registrare il client sul server pump.io \'%s\'';
|
||||
$a->strings['You are now authenticated to pumpio.'] = 'Sei autenticato su pump.io';
|
||||
$a->strings['return to the connector page'] = 'ritorna alla pagina del connettore';
|
||||
$a->strings['Post to pumpio'] = 'Invia a pump.io';
|
||||
$a->strings['Pump.io Import/Export/Mirror'] = 'Esporta/Importa/Clona pump.io';
|
||||
$a->strings['pump.io username (without the servername)'] = 'nome utente pump.io (senza il nome del server)';
|
||||
$a->strings['pump.io servername (without "http://" or "https://" )'] = 'nome del server pump.io (senza "http://" o "https://")';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Delete this preset'] = 'Elimina questa preimpostazione';
|
||||
$a->strings['Authenticate your pump.io connection'] = 'Autentica la tua connessione pump.io';
|
||||
$a->strings['Pump.io servername (without "http://" or "https://" )'] = 'Nome server Pump.io (senza "http://" o "https://" )';
|
||||
$a->strings['Pump.io username (without the servername)'] = 'Nome utente Pump.io (senza nome server)';
|
||||
$a->strings['Import the remote timeline'] = 'Importa la timeline remota';
|
||||
$a->strings['Enable pump.io Post Addon'] = 'Abilita il componente aggiuntivo di invio ad pump.io';
|
||||
$a->strings['Post to pump.io by default'] = 'Invia sempre a pump.io';
|
||||
$a->strings['Enable Pump.io Post Addon'] = 'Abilita componente aggiuntivo di pubblicazione Pump.io';
|
||||
$a->strings['Post to Pump.io by default'] = 'Pubblica su Pump.io per impostazione predefinita';
|
||||
$a->strings['Should posts be public?'] = 'I messaggi devono essere pubblici?';
|
||||
$a->strings['Mirror all public posts'] = 'Clona tutti i messaggi pubblici';
|
||||
$a->strings['Check to delete this preset'] = 'Seleziona per elimiare queto preset';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Pump.io post failed. Queued for retry.'] = 'Invio a pump.io fallito. In attesa di riprovare.';
|
||||
$a->strings['Pump.io like failed. Queued for retry.'] = 'Invio \'mi piace\' a pump.io fallito. In attesa di riprovare.';
|
||||
$a->strings['Pump.io Import/Export/Mirror'] = 'Esporta/Importa/Clona pump.io';
|
||||
$a->strings['status'] = 'stato';
|
||||
$a->strings['%1$s likes %2$s\'s %3$s'] = 'a %1$s piace %2$s di %3$s';
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ function pumpio_registerclient($host)
|
|||
$application_name = DI::config()->get('pumpio', 'application_name');
|
||||
|
||||
if ($application_name == '') {
|
||||
$application_name = DI::baseUrl()->getHostname();
|
||||
$application_name = DI::baseUrl()->getHost();
|
||||
}
|
||||
|
||||
$firstAdmin = User::getFirstAdmin(['email']);
|
||||
|
|
@ -105,8 +105,8 @@ function pumpio_registerclient($host)
|
|||
$params['contacts'] = $firstAdmin['email'];
|
||||
$params['application_type'] = 'native';
|
||||
$params['application_name'] = $application_name;
|
||||
$params['logo_url'] = DI::baseUrl()->get() . '/images/friendica-256.png';
|
||||
$params['redirect_uris'] = DI::baseUrl()->get() . '/pumpio/connect';
|
||||
$params['logo_url'] = DI::baseUrl() . '/images/friendica-256.png';
|
||||
$params['redirect_uris'] = DI::baseUrl() . '/pumpio/connect';
|
||||
|
||||
Logger::info('pumpio_registerclient: ' . $url . ' parameters', $params);
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ function pumpio_connect()
|
|||
}
|
||||
|
||||
// The callback URL is the script that gets called after the user authenticates with pumpio
|
||||
$callback_url = DI::baseUrl()->get() . '/pumpio/connect';
|
||||
$callback_url = DI::baseUrl() . '/pumpio/connect';
|
||||
|
||||
// Let's begin. First we need a Request Token. The request token is required to send the user
|
||||
// to pumpio's login page.
|
||||
|
|
@ -194,7 +194,7 @@ function pumpio_connect()
|
|||
if ($success) {
|
||||
Logger::notice('pumpio_connect: authenticated');
|
||||
$o = DI::l10n()->t('You are now authenticated to pumpio.');
|
||||
$o .= '<br /><a href="' . DI::baseUrl()->get() . '/settings/connectors">' . DI::l10n()->t('return to the connector page') . '</a>';
|
||||
$o .= '<br /><a href="' . DI::baseUrl() . '/settings/connectors">' . DI::l10n()->t('return to the connector page') . '</a>';
|
||||
} else {
|
||||
Logger::notice('pumpio_connect: could not connect');
|
||||
$o = 'Could not connect to pumpio. Refresh the page or try again later.';
|
||||
|
|
@ -252,7 +252,7 @@ function pumpio_settings(array &$data)
|
|||
'$pumpio_user' => $pumpio_user,
|
||||
'$oauth_token' => $oauth_token,
|
||||
'$oauth_token_secret' => $oauth_token_secret,
|
||||
'$authenticate_url' => DI::baseUrl()->get() . '/pumpio/connect',
|
||||
'$authenticate_url' => DI::baseUrl() . '/pumpio/connect',
|
||||
'$servername' => ['pumpio_host', DI::l10n()->t('Pump.io servername (without "http://" or "https://" )'), $pumpio_host],
|
||||
'$username' => ['pumpio_user', DI::l10n()->t('Pump.io username (without the servername)'), $pumpio_user],
|
||||
'$import' => ['pumpio_import', DI::l10n()->t('Import the remote timeline'), $import_enabled],
|
||||
|
|
@ -711,7 +711,7 @@ function pumpio_fetchtimeline(int $uid)
|
|||
$application_name = DI::config()->get('pumpio', 'application_name');
|
||||
}
|
||||
if ($application_name == '') {
|
||||
$application_name = DI::baseUrl()->getHostname();
|
||||
$application_name = DI::baseUrl()->getHost();
|
||||
}
|
||||
|
||||
$first_time = ($lastdate == '');
|
||||
|
|
|
|||
|
|
@ -10,46 +10,38 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2018-06-13 18:00+0000\n"
|
||||
"Last-Translator: Aditoo\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:16-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:30+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: qcomment.php:51
|
||||
#: qcomment.php:45
|
||||
msgid ":-)"
|
||||
msgstr ":-)"
|
||||
|
||||
#: qcomment.php:51
|
||||
#: qcomment.php:45
|
||||
msgid ":-("
|
||||
msgstr ":-("
|
||||
|
||||
#: qcomment.php:51
|
||||
#: qcomment.php:45
|
||||
msgid "lol"
|
||||
msgstr "lol"
|
||||
|
||||
#: qcomment.php:54
|
||||
msgid "Quick Comment Settings"
|
||||
msgstr "Nastavení rychlých komentářů"
|
||||
|
||||
#: qcomment.php:56
|
||||
#: qcomment.php:49
|
||||
msgid ""
|
||||
"Quick comments are found near comment boxes, sometimes hidden. Click them to"
|
||||
" provide simple replies."
|
||||
msgstr "Rychlé komentáře jsou k nalezení blízko polí s komentáři, někdy jsou skryté. Klikněte na ně k poskytnutí jednoduchých odpovědí."
|
||||
msgstr "Rychlé komentáře jsou k nalezení blízko polí s komentáři, někdy jsou skryté. Klikněte na ně pro poskytnutí jednoduchých odpovědí."
|
||||
|
||||
#: qcomment.php:57
|
||||
#: qcomment.php:50
|
||||
msgid "Enter quick comments, one per line"
|
||||
msgstr "Zadejte rychlé komentáře, každý na nový řádek"
|
||||
|
||||
#: qcomment.php:61
|
||||
msgid "Submit"
|
||||
msgstr "Odeslat"
|
||||
|
||||
#: qcomment.php:75
|
||||
msgid "Quick Comment settings saved."
|
||||
msgstr "Nastavení Quick Comment uloženo."
|
||||
#: qcomment.php:55
|
||||
msgid "Quick Comment Settings"
|
||||
msgstr "Nastavení rychlých komentářů"
|
||||
|
|
|
|||
|
|
@ -8,8 +8,6 @@ function string_plural_select_cs($n){
|
|||
$a->strings[':-)'] = ':-)';
|
||||
$a->strings[':-('] = ':-(';
|
||||
$a->strings['lol'] = 'lol';
|
||||
$a->strings['Quick Comment Settings'] = 'Nastavení rychlých komentářů';
|
||||
$a->strings['Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.'] = 'Rychlé komentáře jsou k nalezení blízko polí s komentáři, někdy jsou skryté. Klikněte na ně k poskytnutí jednoduchých odpovědí.';
|
||||
$a->strings['Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.'] = 'Rychlé komentáře jsou k nalezení blízko polí s komentáři, někdy jsou skryté. Klikněte na ně pro poskytnutí jednoduchých odpovědí.';
|
||||
$a->strings['Enter quick comments, one per line'] = 'Zadejte rychlé komentáře, každý na nový řádek';
|
||||
$a->strings['Submit'] = 'Odeslat';
|
||||
$a->strings['Quick Comment settings saved.'] = 'Nastavení Quick Comment uloženo.';
|
||||
$a->strings['Quick Comment Settings'] = 'Nastavení rychlých komentářů';
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:16-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 16:24+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:30+0000\n"
|
||||
"Last-Translator: Steffen K9, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -5,50 +5,43 @@
|
|||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2014-2015
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-02-27 05:01-0500\n"
|
||||
"PO-Revision-Date: 2017-09-20 06:08+0000\n"
|
||||
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:16-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:30+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: qcomment.php:51
|
||||
#: qcomment.php:45
|
||||
msgid ":-)"
|
||||
msgstr ":-)"
|
||||
|
||||
#: qcomment.php:51
|
||||
#: qcomment.php:45
|
||||
msgid ":-("
|
||||
msgstr ":-("
|
||||
|
||||
#: qcomment.php:51
|
||||
#: qcomment.php:45
|
||||
msgid "lol"
|
||||
msgstr "lol"
|
||||
|
||||
#: qcomment.php:54
|
||||
msgid "Quick Comment Settings"
|
||||
msgstr "Impostazioni commento rapido"
|
||||
|
||||
#: qcomment.php:56
|
||||
#: qcomment.php:49
|
||||
msgid ""
|
||||
"Quick comments are found near comment boxes, sometimes hidden. Click them to"
|
||||
" provide simple replies."
|
||||
msgstr "Trovi i commenti rapidi vicino al box dei commenti, a volte nascosti. Cliccali per inviare semplici risposte."
|
||||
|
||||
#: qcomment.php:57
|
||||
#: qcomment.php:50
|
||||
msgid "Enter quick comments, one per line"
|
||||
msgstr "Inserire un commento rapido, uno per linea"
|
||||
|
||||
#: qcomment.php:61
|
||||
msgid "Submit"
|
||||
msgstr "Invia"
|
||||
|
||||
#: qcomment.php:75
|
||||
msgid "Quick Comment settings saved."
|
||||
msgstr "Impostazioni commento rapido salvate."
|
||||
#: qcomment.php:55
|
||||
msgid "Quick Comment Settings"
|
||||
msgstr "Impostazioni commento rapido"
|
||||
|
|
|
|||
|
|
@ -3,13 +3,11 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings[':-)'] = ':-)';
|
||||
$a->strings[':-('] = ':-(';
|
||||
$a->strings['lol'] = 'lol';
|
||||
$a->strings['Quick Comment Settings'] = 'Impostazioni commento rapido';
|
||||
$a->strings['Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.'] = 'Trovi i commenti rapidi vicino al box dei commenti, a volte nascosti. Cliccali per inviare semplici risposte.';
|
||||
$a->strings['Enter quick comments, one per line'] = 'Inserire un commento rapido, uno per linea';
|
||||
$a->strings['Submit'] = 'Invia';
|
||||
$a->strings['Quick Comment settings saved.'] = 'Impostazioni commento rapido salvate.';
|
||||
$a->strings['Quick Comment Settings'] = 'Impostazioni commento rapido';
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:16-0500\n"
|
||||
"PO-Revision-Date: 2021-12-22 17:21+0000\n"
|
||||
"Last-Translator: Transifex Bot <>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:34+0000\n"
|
||||
"Last-Translator: Steffen K9, 2021\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -10,24 +10,20 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:57+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:16-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:34+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: randplace.php:161
|
||||
msgid "Enable Randplace Addon"
|
||||
msgstr "Abilita il componente aggiuntivo Posizione Casuale"
|
||||
|
||||
#: randplace.php:166
|
||||
msgid "Randplace Settings"
|
||||
msgstr "Impostazioni \"Posizione casuale\""
|
||||
|
||||
#: randplace.php:168
|
||||
msgid "Enable Randplace Addon"
|
||||
msgstr "Abilita il componente aggiuntivo Posizione Casuale"
|
||||
|
||||
#: randplace.php:174
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
|
|
|||
|
|
@ -3,8 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Randplace Settings'] = 'Impostazioni "Posizione casuale"';
|
||||
$a->strings['Enable Randplace Addon'] = 'Abilita il componente aggiuntivo Posizione Casuale';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Randplace Settings'] = 'Impostazioni "Posizione casuale"';
|
||||
|
|
|
|||
|
|
@ -4,24 +4,52 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Michal Šupler <msupler@gmail.com>, 2014
|
||||
# Aditoo, 2018
|
||||
# michal_s <msupler@gmail.com>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-06-22 13:18+0200\n"
|
||||
"PO-Revision-Date: 2014-07-28 18:10+0000\n"
|
||||
"Last-Translator: Michal Šupler <msupler@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/friendica/language/cs/)\n"
|
||||
"POT-Creation-Date: 2021-12-12 22:09+0000\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:36+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: rendertime.php:30
|
||||
msgid "Save Settings"
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:31
|
||||
msgid "Show callstack"
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:31
|
||||
msgid ""
|
||||
"Show detailed performance measures in the callstack. When deactivated, only "
|
||||
"the summary will be displayed."
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:32
|
||||
msgid "Minimal time"
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:32
|
||||
msgid "Minimal time that an activity needs to be listed in the callstack."
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:57
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Performance: Database: %s, Network: %s, Rendering: %s, Parser: %s, I/O: %s, "
|
||||
"Other: %s, Total: %s"
|
||||
msgstr "Výkonnost: Databáze: %s, Síť: %s, Rendering: %s, Parser: %s, I/O: %s, Ostatní: %s, Celkem: %s"
|
||||
"Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: "
|
||||
"%s, Total: %s"
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:74
|
||||
#, php-format
|
||||
msgid "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s"
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -3,6 +3,5 @@
|
|||
if(! function_exists("string_plural_select_cs")) {
|
||||
function string_plural_select_cs($n){
|
||||
$n = intval($n);
|
||||
if (($n==1)) { return 0; } else if (($n>=2 && $n<=4)) { return 1; } else { return 2; }
|
||||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Performance: Database: %s, Network: %s, Rendering: %s, Parser: %s, I/O: %s, Other: %s, Total: %s'] = 'Výkonnost: Databáze: %s, Síť: %s, Rendering: %s, Parser: %s, I/O: %s, Ostatní: %s, Celkem: %s';
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ msgstr ""
|
|||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-12-12 22:09+0000\n"
|
||||
"PO-Revision-Date: 2022-01-22 17:39+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:36+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2021-2022\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
|
|
|||
|
|
@ -10,24 +10,46 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 13:01+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-12-12 22:09+0000\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:36+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: rendertime.php:36
|
||||
#: rendertime.php:30
|
||||
msgid "Save Settings"
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:31
|
||||
msgid "Show callstack"
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:31
|
||||
msgid ""
|
||||
"Show detailed performance measures in the callstack. When deactivated, only "
|
||||
"the summary will be displayed."
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:32
|
||||
msgid "Minimal time"
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:32
|
||||
msgid "Minimal time that an activity needs to be listed in the callstack."
|
||||
msgstr ""
|
||||
|
||||
#: rendertime.php:57
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: "
|
||||
"%s, Total: %s"
|
||||
msgstr "Database: %s/%s, Rete: %s, Rendering: %s, Sessione: %s, I/O: %s, Altro: %s, Totale: %s"
|
||||
|
||||
#: rendertime.php:53
|
||||
#: rendertime.php:74
|
||||
#, php-format
|
||||
msgid "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s"
|
||||
msgstr "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Altro: %s, Totale: %s"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s'] = 'Database: %s/%s, Rete: %s, Rendering: %s, Sessione: %s, I/O: %s, Altro: %s, Totale: %s';
|
||||
$a->strings['Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s'] = 'Class-Init: %s, Boot: %s, Init: %s, Content: %s, Altro: %s, Totale: %s';
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class SecureTestEmail extends Email
|
|||
{
|
||||
$sitename = $config->get('config', 'sitename');
|
||||
|
||||
$hostname = $baseUrl->getHostname();
|
||||
$hostname = $baseUrl->getHost();
|
||||
if (strpos($hostname, ':')) {
|
||||
$hostname = substr($hostname, 0, strpos($hostname, ':'));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,26 @@
|
|||
{
|
||||
"name": "friendica-addons/securemail",
|
||||
"description": "Send notification mail encrypted with user-defined public GPG key.",
|
||||
"type": "friendica-addon",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabio Comuni",
|
||||
"homepage": "https://kirgroup.com/profile/fabrixxm",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"singpolyma/openpgp-php": "0.6.0"
|
||||
},
|
||||
"license": "AGPL-3.0+",
|
||||
"minimum-stability": "stable",
|
||||
"config": {
|
||||
"autoloader-suffix": "SecuremailAddon",
|
||||
"platform": {
|
||||
"php": "7.3"
|
||||
}
|
||||
"name": "friendica-addons/securemail",
|
||||
"description": "Send notification mail encrypted with user-defined public GPG key.",
|
||||
"type": "friendica-addon",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabio Comuni",
|
||||
"homepage": "https://kirgroup.com/profile/fabrixxm",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"singpolyma/openpgp-php": "0.6.0"
|
||||
},
|
||||
"replace": {
|
||||
"paragonie/random_compat": "9.99.99"
|
||||
},
|
||||
"license": "AGPL-3.0+",
|
||||
"minimum-stability": "stable",
|
||||
"config": {
|
||||
"autoloader-suffix": "SecuremailAddon",
|
||||
"platform": {
|
||||
"php": "7.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
77
securemail/composer.lock
generated
77
securemail/composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "e0f467bdac029de5c8176dbb7e955f94",
|
||||
"content-hash": "e7230dc266b072700d7e108251b5ea8f",
|
||||
"packages": [
|
||||
{
|
||||
"name": "paragonie/constant_time_encoding",
|
||||
|
|
@ -66,75 +66,20 @@
|
|||
"hex2bin",
|
||||
"rfc4648"
|
||||
],
|
||||
"support": {
|
||||
"email": "info@paragonie.com",
|
||||
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
|
||||
"source": "https://github.com/paragonie/constant_time_encoding"
|
||||
},
|
||||
"time": "2022-06-14T06:56:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/random_compat",
|
||||
"version": "v9.99.100",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/random_compat.git",
|
||||
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
|
||||
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">= 7"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.*|5.*",
|
||||
"vimeo/psalm": "^1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
||||
},
|
||||
"type": "library",
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com",
|
||||
"homepage": "https://paragonie.com"
|
||||
}
|
||||
],
|
||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
||||
"keywords": [
|
||||
"csprng",
|
||||
"polyfill",
|
||||
"pseudorandom",
|
||||
"random"
|
||||
],
|
||||
"support": {
|
||||
"email": "info@paragonie.com",
|
||||
"issues": "https://github.com/paragonie/random_compat/issues",
|
||||
"source": "https://github.com/paragonie/random_compat"
|
||||
},
|
||||
"time": "2020-10-15T08:29:30+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpseclib/phpseclib",
|
||||
"version": "3.0.17",
|
||||
"version": "3.0.19",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpseclib/phpseclib.git",
|
||||
"reference": "dbc2307d5c69aeb22db136c52e91130d7f2ca761"
|
||||
"reference": "cc181005cf548bfd8a4896383bb825d859259f95"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/dbc2307d5c69aeb22db136c52e91130d7f2ca761",
|
||||
"reference": "dbc2307d5c69aeb22db136c52e91130d7f2ca761",
|
||||
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cc181005cf548bfd8a4896383bb825d859259f95",
|
||||
"reference": "cc181005cf548bfd8a4896383bb825d859259f95",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -213,10 +158,6 @@
|
|||
"x.509",
|
||||
"x509"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/phpseclib/phpseclib/issues",
|
||||
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.17"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/terrafrost",
|
||||
|
|
@ -231,7 +172,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-10-24T10:51:50+00:00"
|
||||
"time": "2023-03-05T17:13:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "singpolyma/openpgp-php",
|
||||
|
|
@ -279,10 +220,6 @@
|
|||
}
|
||||
],
|
||||
"description": "Pure-PHP implementation of the OpenPGP Message Format (RFC 4880)",
|
||||
"support": {
|
||||
"issues": "https://github.com/singpolyma/openpgp-php/issues",
|
||||
"source": "https://github.com/singpolyma/openpgp-php/tree/0.6.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/singpolyma",
|
||||
|
|
@ -311,5 +248,5 @@
|
|||
"platform-overrides": {
|
||||
"php": "7.3"
|
||||
},
|
||||
"plugin-api-version": "2.0.0"
|
||||
"plugin-api-version": "1.1.0"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,53 +3,52 @@
|
|||
# This file is distributed under the same license as the Friendica securemail addon package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2018
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-11 21:14+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:16-0500\n"
|
||||
"PO-Revision-Date: 2018-03-20 07:26+0000\n"
|
||||
"Last-Translator: fabrixxm <fabrix.xm@gmail.com>, 2018\n"
|
||||
"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: securemail.php:53
|
||||
msgid "\"Secure Mail\" Settings"
|
||||
msgstr "Impostazioni Secure Mail"
|
||||
|
||||
#: securemail.php:54
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: securemail.php:55 securemail.php:76
|
||||
msgid "Save and send test"
|
||||
msgstr "Salva e invia mail di prova"
|
||||
|
||||
#: securemail.php:56
|
||||
#: securemail.php:50
|
||||
msgid "Enable Secure Mail"
|
||||
msgstr "Abilita Secure Mail"
|
||||
|
||||
#: securemail.php:57
|
||||
#: securemail.php:51
|
||||
msgid "Public key"
|
||||
msgstr "Chiave pubblica"
|
||||
|
||||
#: securemail.php:57
|
||||
#: securemail.php:51
|
||||
msgid "Your public PGP key, ascii armored format"
|
||||
msgstr "La tua chiave pubblica PGP, in formato ascii armored"
|
||||
|
||||
#: securemail.php:74
|
||||
msgid "Secure Mail Settings saved."
|
||||
msgstr "Impostazioni Secure Mail salvate."
|
||||
#: securemail.php:56
|
||||
msgid "\"Secure Mail\" Settings"
|
||||
msgstr "Impostazioni Secure Mail"
|
||||
|
||||
#: securemail.php:111
|
||||
#: securemail.php:59
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: securemail.php:60
|
||||
msgid "Save and send test"
|
||||
msgstr "Salva e invia mail di prova"
|
||||
|
||||
#: securemail.php:93
|
||||
msgid "Test email sent"
|
||||
msgstr "Email di prova invata"
|
||||
|
||||
#: securemail.php:113
|
||||
#: securemail.php:95
|
||||
msgid "There was an error sending the test email"
|
||||
msgstr "Si è verificato un errore durante l'invio dell'email di prova"
|
||||
|
|
|
|||
|
|
@ -3,14 +3,13 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['"Secure Mail" Settings'] = 'Impostazioni Secure Mail';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Save and send test'] = 'Salva e invia mail di prova';
|
||||
$a->strings['Enable Secure Mail'] = 'Abilita Secure Mail';
|
||||
$a->strings['Public key'] = 'Chiave pubblica';
|
||||
$a->strings['Your public PGP key, ascii armored format'] = 'La tua chiave pubblica PGP, in formato ascii armored';
|
||||
$a->strings['Secure Mail Settings saved.'] = 'Impostazioni Secure Mail salvate.';
|
||||
$a->strings['"Secure Mail" Settings'] = 'Impostazioni Secure Mail';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Save and send test'] = 'Salva e invia mail di prova';
|
||||
$a->strings['Test email sent'] = 'Email di prova invata';
|
||||
$a->strings['There was an error sending the test email'] = 'Si è verificato un errore durante l\'invio dell\'email di prova';
|
||||
|
|
|
|||
4
securemail/vendor/composer/ClassLoader.php
vendored
4
securemail/vendor/composer/ClassLoader.php
vendored
|
|
@ -37,8 +37,8 @@ namespace Composer\Autoload;
|
|||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @see https://www.php-fig.org/psr/psr-0/
|
||||
* @see https://www.php-fig.org/psr/psr-4/
|
||||
* @see http://www.php-fig.org/psr/psr-0/
|
||||
* @see http://www.php-fig.org/psr/psr-4/
|
||||
*/
|
||||
class ClassLoader
|
||||
{
|
||||
|
|
|
|||
245
securemail/vendor/composer/InstalledVersions.php
vendored
245
securemail/vendor/composer/InstalledVersions.php
vendored
|
|
@ -1,245 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Composer;
|
||||
|
||||
use Composer\Semver\VersionParser;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class InstalledVersions
|
||||
{
|
||||
private static $installed = array (
|
||||
'root' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
'name' => 'friendica-addons/securemail',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'friendica-addons/securemail' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
),
|
||||
'paragonie/constant_time_encoding' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.6.3',
|
||||
'version' => '2.6.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
|
||||
),
|
||||
'paragonie/random_compat' =>
|
||||
array (
|
||||
'pretty_version' => 'v9.99.100',
|
||||
'version' => '9.99.100.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a',
|
||||
),
|
||||
'phpseclib/phpseclib' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.17',
|
||||
'version' => '3.0.17.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'dbc2307d5c69aeb22db136c52e91130d7f2ca761',
|
||||
),
|
||||
'singpolyma/openpgp-php' =>
|
||||
array (
|
||||
'pretty_version' => '0.6.0',
|
||||
'version' => '0.6.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1c3bdcd2d9c6113c2d6b768e208e7432a48d3a1e',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getInstalledPackages()
|
||||
{
|
||||
return array_keys(self::$installed['versions']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function isInstalled($packageName)
|
||||
{
|
||||
return isset(self::$installed['versions'][$packageName]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
||||
{
|
||||
$constraint = $parser->parseConstraints($constraint);
|
||||
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
||||
|
||||
return $provided->matches($constraint);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getVersionRanges($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
$ranges = array();
|
||||
if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
||||
$ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
|
||||
}
|
||||
if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
|
||||
}
|
||||
if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
|
||||
}
|
||||
|
||||
return implode(' || ', $ranges);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getVersion($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
if (!isset(self::$installed['versions'][$packageName]['version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$installed['versions'][$packageName]['version'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getPrettyVersion($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getReference($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
if (!isset(self::$installed['versions'][$packageName]['reference'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$installed['versions'][$packageName]['reference'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getRootPackage()
|
||||
{
|
||||
return self::$installed['root'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getRawData()
|
||||
{
|
||||
return self::$installed;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function reload($data)
|
||||
{
|
||||
self::$installed = $data;
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,6 @@ $vendorDir = dirname(dirname(__FILE__));
|
|||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
||||
'MCryptWrapper' => $vendorDir . '/singpolyma/openpgp-php/lib/openpgp_mcrypt_wrapper.php',
|
||||
'OpenPGP' => $vendorDir . '/singpolyma/openpgp-php/lib/openpgp.php',
|
||||
'OpenPGP_AsymmetricSessionKeyPacket' => $vendorDir . '/singpolyma/openpgp-php/lib/openpgp.php',
|
||||
|
|
|
|||
2
securemail/vendor/composer/autoload_psr4.php
vendored
2
securemail/vendor/composer/autoload_psr4.php
vendored
|
|
@ -6,4 +6,6 @@ $vendorDir = dirname(dirname(__FILE__));
|
|||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'phpseclib3\\' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
|
||||
'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'),
|
||||
);
|
||||
|
|
|
|||
4
securemail/vendor/composer/autoload_real.php
vendored
4
securemail/vendor/composer/autoload_real.php
vendored
|
|
@ -22,15 +22,13 @@ class ComposerAutoloaderInitSecuremailAddon
|
|||
return self::$loader;
|
||||
}
|
||||
|
||||
require __DIR__ . '/platform_check.php';
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInitSecuremailAddon', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInitSecuremailAddon', 'loadClassLoader'));
|
||||
|
||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||
if ($useStaticLoader) {
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
require_once __DIR__ . '/autoload_static.php';
|
||||
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInitSecuremailAddon::getInitializer($loader));
|
||||
} else {
|
||||
|
|
|
|||
17
securemail/vendor/composer/autoload_static.php
vendored
17
securemail/vendor/composer/autoload_static.php
vendored
|
|
@ -11,13 +11,28 @@ class ComposerStaticInitSecuremailAddon
|
|||
);
|
||||
|
||||
public static $prefixLengthsPsr4 = array (
|
||||
'p' =>
|
||||
array (
|
||||
'phpseclib3\\' => 11,
|
||||
),
|
||||
'P' =>
|
||||
array (
|
||||
'ParagonIE\\ConstantTime\\' => 23,
|
||||
),
|
||||
);
|
||||
|
||||
public static $prefixDirsPsr4 = array (
|
||||
'phpseclib3\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib',
|
||||
),
|
||||
'ParagonIE\\ConstantTime\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src',
|
||||
),
|
||||
);
|
||||
|
||||
public static $classMap = array (
|
||||
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
||||
'MCryptWrapper' => __DIR__ . '/..' . '/singpolyma/openpgp-php/lib/openpgp_mcrypt_wrapper.php',
|
||||
'OpenPGP' => __DIR__ . '/..' . '/singpolyma/openpgp-php/lib/openpgp.php',
|
||||
'OpenPGP_AsymmetricSessionKeyPacket' => __DIR__ . '/..' . '/singpolyma/openpgp-php/lib/openpgp.php',
|
||||
|
|
|
|||
537
securemail/vendor/composer/installed.json
vendored
537
securemail/vendor/composer/installed.json
vendored
|
|
@ -1,311 +1,238 @@
|
|||
{
|
||||
"packages": [
|
||||
{
|
||||
"name": "paragonie/constant_time_encoding",
|
||||
"version": "v2.6.3",
|
||||
"version_normalized": "2.6.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/constant_time_encoding.git",
|
||||
"reference": "58c3f47f650c94ec05a151692652a868995d2938"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
|
||||
"reference": "58c3f47f650c94ec05a151692652a868995d2938",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7|^8"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^6|^7|^8|^9",
|
||||
"vimeo/psalm": "^1|^2|^3|^4"
|
||||
},
|
||||
"time": "2022-06-14T06:56:20+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"ParagonIE\\ConstantTime\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com",
|
||||
"homepage": "https://paragonie.com",
|
||||
"role": "Maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Steve 'Sc00bz' Thomas",
|
||||
"email": "steve@tobtu.com",
|
||||
"homepage": "https://www.tobtu.com",
|
||||
"role": "Original Developer"
|
||||
}
|
||||
],
|
||||
"description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
|
||||
"keywords": [
|
||||
"base16",
|
||||
"base32",
|
||||
"base32_decode",
|
||||
"base32_encode",
|
||||
"base64",
|
||||
"base64_decode",
|
||||
"base64_encode",
|
||||
"bin2hex",
|
||||
"encoding",
|
||||
"hex",
|
||||
"hex2bin",
|
||||
"rfc4648"
|
||||
],
|
||||
"support": {
|
||||
"email": "info@paragonie.com",
|
||||
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
|
||||
"source": "https://github.com/paragonie/constant_time_encoding"
|
||||
},
|
||||
"install-path": "../paragonie/constant_time_encoding"
|
||||
[
|
||||
{
|
||||
"name": "paragonie/constant_time_encoding",
|
||||
"version": "v2.6.3",
|
||||
"version_normalized": "2.6.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/constant_time_encoding.git",
|
||||
"reference": "58c3f47f650c94ec05a151692652a868995d2938"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/random_compat",
|
||||
"version": "v9.99.100",
|
||||
"version_normalized": "9.99.100.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/random_compat.git",
|
||||
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
|
||||
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">= 7"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.*|5.*",
|
||||
"vimeo/psalm": "^1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
||||
},
|
||||
"time": "2020-10-15T08:29:30+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com",
|
||||
"homepage": "https://paragonie.com"
|
||||
}
|
||||
],
|
||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
||||
"keywords": [
|
||||
"csprng",
|
||||
"polyfill",
|
||||
"pseudorandom",
|
||||
"random"
|
||||
],
|
||||
"support": {
|
||||
"email": "info@paragonie.com",
|
||||
"issues": "https://github.com/paragonie/random_compat/issues",
|
||||
"source": "https://github.com/paragonie/random_compat"
|
||||
},
|
||||
"install-path": "../paragonie/random_compat"
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
|
||||
"reference": "58c3f47f650c94ec05a151692652a868995d2938",
|
||||
"shasum": ""
|
||||
},
|
||||
{
|
||||
"name": "phpseclib/phpseclib",
|
||||
"version": "3.0.17",
|
||||
"version_normalized": "3.0.17.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpseclib/phpseclib.git",
|
||||
"reference": "dbc2307d5c69aeb22db136c52e91130d7f2ca761"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/dbc2307d5c69aeb22db136c52e91130d7f2ca761",
|
||||
"reference": "dbc2307d5c69aeb22db136c52e91130d7f2ca761",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"paragonie/constant_time_encoding": "^1|^2",
|
||||
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
|
||||
"php": ">=5.6.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-dom": "Install the DOM extension to load XML formatted public keys.",
|
||||
"ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
|
||||
"ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
|
||||
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
|
||||
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
|
||||
},
|
||||
"time": "2022-10-24T10:51:50+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"phpseclib/bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"phpseclib3\\": "phpseclib/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jim Wigginton",
|
||||
"email": "terrafrost@php.net",
|
||||
"role": "Lead Developer"
|
||||
},
|
||||
{
|
||||
"name": "Patrick Monnerat",
|
||||
"email": "pm@datasphere.ch",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Andreas Fischer",
|
||||
"email": "bantu@phpbb.com",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Hans-Jürgen Petrich",
|
||||
"email": "petrich@tronic-media.com",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "graham@alt-three.com",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
|
||||
"homepage": "http://phpseclib.sourceforge.net",
|
||||
"keywords": [
|
||||
"BigInteger",
|
||||
"aes",
|
||||
"asn.1",
|
||||
"asn1",
|
||||
"blowfish",
|
||||
"crypto",
|
||||
"cryptography",
|
||||
"encryption",
|
||||
"rsa",
|
||||
"security",
|
||||
"sftp",
|
||||
"signature",
|
||||
"signing",
|
||||
"ssh",
|
||||
"twofish",
|
||||
"x.509",
|
||||
"x509"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/phpseclib/phpseclib/issues",
|
||||
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.17"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/terrafrost",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://www.patreon.com/phpseclib",
|
||||
"type": "patreon"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"install-path": "../phpseclib/phpseclib"
|
||||
"require": {
|
||||
"php": "^7|^8"
|
||||
},
|
||||
{
|
||||
"name": "singpolyma/openpgp-php",
|
||||
"version": "0.6.0",
|
||||
"version_normalized": "0.6.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/singpolyma/openpgp-php.git",
|
||||
"reference": "1c3bdcd2d9c6113c2d6b768e208e7432a48d3a1e"
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^6|^7|^8|^9",
|
||||
"vimeo/psalm": "^1|^2|^3|^4"
|
||||
},
|
||||
"time": "2022-06-14T06:56:20+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"ParagonIE\\ConstantTime\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com",
|
||||
"homepage": "https://paragonie.com",
|
||||
"role": "Maintainer"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/singpolyma/openpgp-php/zipball/1c3bdcd2d9c6113c2d6b768e208e7432a48d3a1e",
|
||||
"reference": "1c3bdcd2d9c6113c2d6b768e208e7432a48d3a1e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.6 || ^7.0 || ^8.0",
|
||||
"phpseclib/phpseclib": "^3.0.14"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mcrypt": "required if you use encryption cast5",
|
||||
"ext-openssl": "required if you use encryption cast5"
|
||||
},
|
||||
"time": "2022-10-31T13:43:21+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"lib/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Unlicense"
|
||||
{
|
||||
"name": "Steve 'Sc00bz' Thomas",
|
||||
"email": "steve@tobtu.com",
|
||||
"homepage": "https://www.tobtu.com",
|
||||
"role": "Original Developer"
|
||||
}
|
||||
],
|
||||
"description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
|
||||
"keywords": [
|
||||
"base16",
|
||||
"base32",
|
||||
"base32_decode",
|
||||
"base32_encode",
|
||||
"base64",
|
||||
"base64_decode",
|
||||
"base64_encode",
|
||||
"bin2hex",
|
||||
"encoding",
|
||||
"hex",
|
||||
"hex2bin",
|
||||
"rfc4648"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "phpseclib/phpseclib",
|
||||
"version": "3.0.19",
|
||||
"version_normalized": "3.0.19.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpseclib/phpseclib.git",
|
||||
"reference": "cc181005cf548bfd8a4896383bb825d859259f95"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cc181005cf548bfd8a4896383bb825d859259f95",
|
||||
"reference": "cc181005cf548bfd8a4896383bb825d859259f95",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"paragonie/constant_time_encoding": "^1|^2",
|
||||
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
|
||||
"php": ">=5.6.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-dom": "Install the DOM extension to load XML formatted public keys.",
|
||||
"ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
|
||||
"ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
|
||||
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
|
||||
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
|
||||
},
|
||||
"time": "2023-03-05T17:13:09+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"phpseclib/bootstrap.php"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Arto Bendiken",
|
||||
"email": "arto.bendiken@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Stephen Paul Weber",
|
||||
"email": "singpolyma@singpolyma.net"
|
||||
}
|
||||
],
|
||||
"description": "Pure-PHP implementation of the OpenPGP Message Format (RFC 4880)",
|
||||
"support": {
|
||||
"issues": "https://github.com/singpolyma/openpgp-php/issues",
|
||||
"source": "https://github.com/singpolyma/openpgp-php/tree/0.6.0"
|
||||
"psr-4": {
|
||||
"phpseclib3\\": "phpseclib/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jim Wigginton",
|
||||
"email": "terrafrost@php.net",
|
||||
"role": "Lead Developer"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/singpolyma",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://liberapay.com/singpolyma",
|
||||
"type": "liberapay"
|
||||
},
|
||||
{
|
||||
"url": "https://www.patreon.com/singpolyma",
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"install-path": "../singpolyma/openpgp-php"
|
||||
}
|
||||
],
|
||||
"dev": true,
|
||||
"dev-package-names": []
|
||||
}
|
||||
{
|
||||
"name": "Patrick Monnerat",
|
||||
"email": "pm@datasphere.ch",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Andreas Fischer",
|
||||
"email": "bantu@phpbb.com",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Hans-Jürgen Petrich",
|
||||
"email": "petrich@tronic-media.com",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "graham@alt-three.com",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
|
||||
"homepage": "http://phpseclib.sourceforge.net",
|
||||
"keywords": [
|
||||
"BigInteger",
|
||||
"aes",
|
||||
"asn.1",
|
||||
"asn1",
|
||||
"blowfish",
|
||||
"crypto",
|
||||
"cryptography",
|
||||
"encryption",
|
||||
"rsa",
|
||||
"security",
|
||||
"sftp",
|
||||
"signature",
|
||||
"signing",
|
||||
"ssh",
|
||||
"twofish",
|
||||
"x.509",
|
||||
"x509"
|
||||
],
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/terrafrost",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://www.patreon.com/phpseclib",
|
||||
"type": "patreon"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
|
||||
"type": "tidelift"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "singpolyma/openpgp-php",
|
||||
"version": "0.6.0",
|
||||
"version_normalized": "0.6.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/singpolyma/openpgp-php.git",
|
||||
"reference": "1c3bdcd2d9c6113c2d6b768e208e7432a48d3a1e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/singpolyma/openpgp-php/zipball/1c3bdcd2d9c6113c2d6b768e208e7432a48d3a1e",
|
||||
"reference": "1c3bdcd2d9c6113c2d6b768e208e7432a48d3a1e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.6 || ^7.0 || ^8.0",
|
||||
"phpseclib/phpseclib": "^3.0.14"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^9.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mcrypt": "required if you use encryption cast5",
|
||||
"ext-openssl": "required if you use encryption cast5"
|
||||
},
|
||||
"time": "2022-10-31T13:43:21+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"lib/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"Unlicense"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Arto Bendiken",
|
||||
"email": "arto.bendiken@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Stephen Paul Weber",
|
||||
"email": "singpolyma@singpolyma.net"
|
||||
}
|
||||
],
|
||||
"description": "Pure-PHP implementation of the OpenPGP Message Format (RFC 4880)",
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/singpolyma",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://liberapay.com/singpolyma",
|
||||
"type": "liberapay"
|
||||
},
|
||||
{
|
||||
"url": "https://www.patreon.com/singpolyma",
|
||||
"type": "patreon"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
60
securemail/vendor/composer/installed.php
vendored
60
securemail/vendor/composer/installed.php
vendored
|
|
@ -1,60 +0,0 @@
|
|||
<?php return array (
|
||||
'root' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
'name' => 'friendica-addons/securemail',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'friendica-addons/securemail' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
),
|
||||
'paragonie/constant_time_encoding' =>
|
||||
array (
|
||||
'pretty_version' => 'v2.6.3',
|
||||
'version' => '2.6.3.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
|
||||
),
|
||||
'paragonie/random_compat' =>
|
||||
array (
|
||||
'pretty_version' => 'v9.99.100',
|
||||
'version' => '9.99.100.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a',
|
||||
),
|
||||
'phpseclib/phpseclib' =>
|
||||
array (
|
||||
'pretty_version' => '3.0.17',
|
||||
'version' => '3.0.17.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => 'dbc2307d5c69aeb22db136c52e91130d7f2ca761',
|
||||
),
|
||||
'singpolyma/openpgp-php' =>
|
||||
array (
|
||||
'pretty_version' => '0.6.0',
|
||||
'version' => '0.6.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '1c3bdcd2d9c6113c2d6b768e208e7432a48d3a1e',
|
||||
),
|
||||
),
|
||||
);
|
||||
26
securemail/vendor/composer/platform_check.php
vendored
26
securemail/vendor/composer/platform_check.php
vendored
|
|
@ -1,26 +0,0 @@
|
|||
<?php
|
||||
|
||||
// platform_check.php @generated by Composer
|
||||
|
||||
$issues = array();
|
||||
|
||||
if (!(PHP_VERSION_ID >= 70000)) {
|
||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.0.0". You are running ' . PHP_VERSION . '.';
|
||||
}
|
||||
|
||||
if ($issues) {
|
||||
if (!headers_sent()) {
|
||||
header('HTTP/1.1 500 Internal Server Error');
|
||||
}
|
||||
if (!ini_get('display_errors')) {
|
||||
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
|
||||
} elseif (!headers_sent()) {
|
||||
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
||||
}
|
||||
}
|
||||
trigger_error(
|
||||
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
48
securemail/vendor/paragonie/constant_time_encoding/LICENSE.txt
vendored
Normal file
48
securemail/vendor/paragonie/constant_time_encoding/LICENSE.txt
vendored
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 - 2022 Paragon Initiative Enterprises
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
This library was based on the work of Steve "Sc00bz" Thomas.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Steve Thomas
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
84
securemail/vendor/paragonie/constant_time_encoding/README.md
vendored
Normal file
84
securemail/vendor/paragonie/constant_time_encoding/README.md
vendored
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
# Constant-Time Encoding
|
||||
|
||||
[](https://github.com/paragonie/constant_time_encoding/actions)
|
||||
[](https://packagist.org/packages/paragonie/constant_time_encoding)
|
||||
[](https://packagist.org/packages/paragonie/constant_time_encoding)
|
||||
[](https://packagist.org/packages/paragonie/constant_time_encoding)
|
||||
[](https://packagist.org/packages/paragonie/constant_time_encoding)
|
||||
|
||||
Based on the [constant-time base64 implementation made by Steve "Sc00bz" Thomas](https://github.com/Sc00bz/ConstTimeEncoding),
|
||||
this library aims to offer character encoding functions that do not leak
|
||||
information about what you are encoding/decoding via processor cache
|
||||
misses. Further reading on [cache-timing attacks](http://blog.ircmaxell.com/2014/11/its-all-about-time.html).
|
||||
|
||||
Our fork offers the following enchancements:
|
||||
|
||||
* `mbstring.func_overload` resistance
|
||||
* Unit tests
|
||||
* Composer- and Packagist-ready
|
||||
* Base16 encoding
|
||||
* Base32 encoding
|
||||
* Uses `pack()` and `unpack()` instead of `chr()` and `ord()`
|
||||
|
||||
## PHP Version Requirements
|
||||
|
||||
Version 2 of this library should work on **PHP 7** or newer. For PHP 5
|
||||
support, see [the v1.x branch](https://github.com/paragonie/constant_time_encoding/tree/v1.x).
|
||||
|
||||
If you are adding this as a dependency to a project intended to work on both PHP 5 and PHP 7, please set the required version to `^1|^2` instead of just `^1` or `^2`.
|
||||
|
||||
## How to Install
|
||||
|
||||
```sh
|
||||
composer require paragonie/constant_time_encoding
|
||||
```
|
||||
|
||||
## How to Use
|
||||
|
||||
```php
|
||||
use ParagonIE\ConstantTime\Encoding;
|
||||
|
||||
// possibly (if applicable):
|
||||
// require 'vendor/autoload.php';
|
||||
|
||||
$data = random_bytes(32);
|
||||
echo Encoding::base64Encode($data), "\n";
|
||||
echo Encoding::base32EncodeUpper($data), "\n";
|
||||
echo Encoding::base32Encode($data), "\n";
|
||||
echo Encoding::hexEncode($data), "\n";
|
||||
echo Encoding::hexEncodeUpper($data), "\n";
|
||||
```
|
||||
|
||||
Example output:
|
||||
|
||||
```
|
||||
1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
|
||||
2VMKKPSHSWVCVZJ6E7SONRY3ZXCNG3GE6ZZFU7TGJSX7KUKFNLAQ====
|
||||
2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
|
||||
d558a53e4795aa2ae53e27e4e6c71bcdc4d36cc4f6725a7e664caff551456ac1
|
||||
D558A53E4795AA2AE53E27E4E6C71BDCC4D36CC4F6725A7E664CAFF551456AC1
|
||||
```
|
||||
|
||||
If you only need a particular variant, you can just reference the
|
||||
required class like so:
|
||||
|
||||
```php
|
||||
use ParagonIE\ConstantTime\Base64;
|
||||
use ParagonIE\ConstantTime\Base32;
|
||||
|
||||
$data = random_bytes(32);
|
||||
echo Base64::encode($data), "\n";
|
||||
echo Base32::encode($data), "\n";
|
||||
```
|
||||
|
||||
Example output:
|
||||
|
||||
```
|
||||
1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
|
||||
2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
|
||||
```
|
||||
|
||||
## Support Contracts
|
||||
|
||||
If your company uses this library in their products or services, you may be
|
||||
interested in [purchasing a support contract from Paragon Initiative Enterprises](https://paragonie.com/enterprise).
|
||||
56
securemail/vendor/paragonie/constant_time_encoding/composer.json
vendored
Normal file
56
securemail/vendor/paragonie/constant_time_encoding/composer.json
vendored
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"name": "paragonie/constant_time_encoding",
|
||||
"description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
|
||||
"keywords": [
|
||||
"base64",
|
||||
"encoding",
|
||||
"rfc4648",
|
||||
"base32",
|
||||
"base16",
|
||||
"hex",
|
||||
"bin2hex",
|
||||
"hex2bin",
|
||||
"base64_encode",
|
||||
"base64_decode",
|
||||
"base32_encode",
|
||||
"base32_decode"
|
||||
],
|
||||
"license": "MIT",
|
||||
"type": "library",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com",
|
||||
"homepage": "https://paragonie.com",
|
||||
"role": "Maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Steve 'Sc00bz' Thomas",
|
||||
"email": "steve@tobtu.com",
|
||||
"homepage": "https://www.tobtu.com",
|
||||
"role": "Original Developer"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
|
||||
"email": "info@paragonie.com",
|
||||
"source": "https://github.com/paragonie/constant_time_encoding"
|
||||
},
|
||||
"require": {
|
||||
"php": "^7|^8"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^6|^7|^8|^9",
|
||||
"vimeo/psalm": "^1|^2|^3|^4"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"ParagonIE\\ConstantTime\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"ParagonIE\\ConstantTime\\Tests\\": "tests/"
|
||||
}
|
||||
}
|
||||
}
|
||||
519
securemail/vendor/paragonie/constant_time_encoding/src/Base32.php
vendored
Normal file
519
securemail/vendor/paragonie/constant_time_encoding/src/Base32.php
vendored
Normal file
|
|
@ -0,0 +1,519 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use RangeException;
|
||||
use TypeError;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Base32
|
||||
* [A-Z][2-7]
|
||||
*
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class Base32 implements EncoderInterface
|
||||
{
|
||||
/**
|
||||
* Decode a Base32-encoded string into raw binary
|
||||
*
|
||||
* @param string $encodedString
|
||||
* @param bool $strictPadding
|
||||
* @return string
|
||||
*/
|
||||
public static function decode(string $encodedString, bool $strictPadding = false): string
|
||||
{
|
||||
return static::doDecode($encodedString, false, $strictPadding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode an uppercase Base32-encoded string into raw binary
|
||||
*
|
||||
* @param string $src
|
||||
* @param bool $strictPadding
|
||||
* @return string
|
||||
*/
|
||||
public static function decodeUpper(string $src, bool $strictPadding = false): string
|
||||
{
|
||||
return static::doDecode($src, true, $strictPadding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode into Base32 (RFC 4648)
|
||||
*
|
||||
* @param string $binString
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function encode(string $binString): string
|
||||
{
|
||||
return static::doEncode($binString, false, true);
|
||||
}
|
||||
/**
|
||||
* Encode into Base32 (RFC 4648)
|
||||
*
|
||||
* @param string $src
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function encodeUnpadded(string $src): string
|
||||
{
|
||||
return static::doEncode($src, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode into uppercase Base32 (RFC 4648)
|
||||
*
|
||||
* @param string $src
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function encodeUpper(string $src): string
|
||||
{
|
||||
return static::doEncode($src, true, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode into uppercase Base32 (RFC 4648)
|
||||
*
|
||||
* @param string $src
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function encodeUpperUnpadded(string $src): string
|
||||
{
|
||||
return static::doEncode($src, true, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 5-bit integers
|
||||
* into 8-bit integers.
|
||||
*
|
||||
* @param int $src
|
||||
* @return int
|
||||
*/
|
||||
protected static function decode5Bits(int $src): int
|
||||
{
|
||||
$ret = -1;
|
||||
|
||||
// if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64
|
||||
$ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 96);
|
||||
|
||||
// if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23
|
||||
$ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 5-bit integers
|
||||
* into 8-bit integers.
|
||||
*
|
||||
* Uppercase variant.
|
||||
*
|
||||
* @param int $src
|
||||
* @return int
|
||||
*/
|
||||
protected static function decode5BitsUpper(int $src): int
|
||||
{
|
||||
$ret = -1;
|
||||
|
||||
// if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64
|
||||
$ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);
|
||||
|
||||
// if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23
|
||||
$ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
||||
* into 5-bit integers.
|
||||
*
|
||||
* @param int $src
|
||||
* @return string
|
||||
*/
|
||||
protected static function encode5Bits(int $src): string
|
||||
{
|
||||
$diff = 0x61;
|
||||
|
||||
// if ($src > 25) $ret -= 72;
|
||||
$diff -= ((25 - $src) >> 8) & 73;
|
||||
|
||||
return \pack('C', $src + $diff);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
||||
* into 5-bit integers.
|
||||
*
|
||||
* Uppercase variant.
|
||||
*
|
||||
* @param int $src
|
||||
* @return string
|
||||
*/
|
||||
protected static function encode5BitsUpper(int $src): string
|
||||
{
|
||||
$diff = 0x41;
|
||||
|
||||
// if ($src > 25) $ret -= 40;
|
||||
$diff -= ((25 - $src) >> 8) & 41;
|
||||
|
||||
return \pack('C', $src + $diff);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $encodedString
|
||||
* @param bool $upper
|
||||
* @return string
|
||||
*/
|
||||
public static function decodeNoPadding(string $encodedString, bool $upper = false): string
|
||||
{
|
||||
$srcLen = Binary::safeStrlen($encodedString);
|
||||
if ($srcLen === 0) {
|
||||
return '';
|
||||
}
|
||||
if (($srcLen & 7) === 0) {
|
||||
for ($j = 0; $j < 7 && $j < $srcLen; ++$j) {
|
||||
if ($encodedString[$srcLen - $j - 1] === '=') {
|
||||
throw new InvalidArgumentException(
|
||||
"decodeNoPadding() doesn't tolerate padding"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
return static::doDecode(
|
||||
$encodedString,
|
||||
$upper,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Base32 decoding
|
||||
*
|
||||
* @param string $src
|
||||
* @param bool $upper
|
||||
* @param bool $strictPadding
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
* @psalm-suppress RedundantCondition
|
||||
*/
|
||||
protected static function doDecode(
|
||||
string $src,
|
||||
bool $upper = false,
|
||||
bool $strictPadding = false
|
||||
): string {
|
||||
// We do this to reduce code duplication:
|
||||
$method = $upper
|
||||
? 'decode5BitsUpper'
|
||||
: 'decode5Bits';
|
||||
|
||||
// Remove padding
|
||||
$srcLen = Binary::safeStrlen($src);
|
||||
if ($srcLen === 0) {
|
||||
return '';
|
||||
}
|
||||
if ($strictPadding) {
|
||||
if (($srcLen & 7) === 0) {
|
||||
for ($j = 0; $j < 7; ++$j) {
|
||||
if ($src[$srcLen - 1] === '=') {
|
||||
$srcLen--;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (($srcLen & 7) === 1) {
|
||||
throw new RangeException(
|
||||
'Incorrect padding'
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$src = \rtrim($src, '=');
|
||||
$srcLen = Binary::safeStrlen($src);
|
||||
}
|
||||
|
||||
$err = 0;
|
||||
$dest = '';
|
||||
// Main loop (no padding):
|
||||
for ($i = 0; $i + 8 <= $srcLen; $i += 8) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C*', Binary::safeSubstr($src, $i, 8));
|
||||
/** @var int $c0 */
|
||||
$c0 = static::$method($chunk[1]);
|
||||
/** @var int $c1 */
|
||||
$c1 = static::$method($chunk[2]);
|
||||
/** @var int $c2 */
|
||||
$c2 = static::$method($chunk[3]);
|
||||
/** @var int $c3 */
|
||||
$c3 = static::$method($chunk[4]);
|
||||
/** @var int $c4 */
|
||||
$c4 = static::$method($chunk[5]);
|
||||
/** @var int $c5 */
|
||||
$c5 = static::$method($chunk[6]);
|
||||
/** @var int $c6 */
|
||||
$c6 = static::$method($chunk[7]);
|
||||
/** @var int $c7 */
|
||||
$c7 = static::$method($chunk[8]);
|
||||
|
||||
$dest .= \pack(
|
||||
'CCCCC',
|
||||
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
|
||||
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
|
||||
(($c3 << 4) | ($c4 >> 1) ) & 0xff,
|
||||
(($c4 << 7) | ($c5 << 2) | ($c6 >> 3)) & 0xff,
|
||||
(($c6 << 5) | ($c7 ) ) & 0xff
|
||||
);
|
||||
$err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5 | $c6 | $c7) >> 8;
|
||||
}
|
||||
// The last chunk, which may have padding:
|
||||
if ($i < $srcLen) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C*', Binary::safeSubstr($src, $i, $srcLen - $i));
|
||||
/** @var int $c0 */
|
||||
$c0 = static::$method($chunk[1]);
|
||||
|
||||
if ($i + 6 < $srcLen) {
|
||||
/** @var int $c1 */
|
||||
$c1 = static::$method($chunk[2]);
|
||||
/** @var int $c2 */
|
||||
$c2 = static::$method($chunk[3]);
|
||||
/** @var int $c3 */
|
||||
$c3 = static::$method($chunk[4]);
|
||||
/** @var int $c4 */
|
||||
$c4 = static::$method($chunk[5]);
|
||||
/** @var int $c5 */
|
||||
$c5 = static::$method($chunk[6]);
|
||||
/** @var int $c6 */
|
||||
$c6 = static::$method($chunk[7]);
|
||||
|
||||
$dest .= \pack(
|
||||
'CCCC',
|
||||
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
|
||||
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
|
||||
(($c3 << 4) | ($c4 >> 1) ) & 0xff,
|
||||
(($c4 << 7) | ($c5 << 2) | ($c6 >> 3)) & 0xff
|
||||
);
|
||||
$err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5 | $c6) >> 8;
|
||||
if ($strictPadding) {
|
||||
$err |= ($c6 << 5) & 0xff;
|
||||
}
|
||||
} elseif ($i + 5 < $srcLen) {
|
||||
/** @var int $c1 */
|
||||
$c1 = static::$method($chunk[2]);
|
||||
/** @var int $c2 */
|
||||
$c2 = static::$method($chunk[3]);
|
||||
/** @var int $c3 */
|
||||
$c3 = static::$method($chunk[4]);
|
||||
/** @var int $c4 */
|
||||
$c4 = static::$method($chunk[5]);
|
||||
/** @var int $c5 */
|
||||
$c5 = static::$method($chunk[6]);
|
||||
|
||||
$dest .= \pack(
|
||||
'CCCC',
|
||||
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
|
||||
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
|
||||
(($c3 << 4) | ($c4 >> 1) ) & 0xff,
|
||||
(($c4 << 7) | ($c5 << 2) ) & 0xff
|
||||
);
|
||||
$err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5) >> 8;
|
||||
} elseif ($i + 4 < $srcLen) {
|
||||
/** @var int $c1 */
|
||||
$c1 = static::$method($chunk[2]);
|
||||
/** @var int $c2 */
|
||||
$c2 = static::$method($chunk[3]);
|
||||
/** @var int $c3 */
|
||||
$c3 = static::$method($chunk[4]);
|
||||
/** @var int $c4 */
|
||||
$c4 = static::$method($chunk[5]);
|
||||
|
||||
$dest .= \pack(
|
||||
'CCC',
|
||||
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
|
||||
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
|
||||
(($c3 << 4) | ($c4 >> 1) ) & 0xff
|
||||
);
|
||||
$err |= ($c0 | $c1 | $c2 | $c3 | $c4) >> 8;
|
||||
if ($strictPadding) {
|
||||
$err |= ($c4 << 7) & 0xff;
|
||||
}
|
||||
} elseif ($i + 3 < $srcLen) {
|
||||
/** @var int $c1 */
|
||||
$c1 = static::$method($chunk[2]);
|
||||
/** @var int $c2 */
|
||||
$c2 = static::$method($chunk[3]);
|
||||
/** @var int $c3 */
|
||||
$c3 = static::$method($chunk[4]);
|
||||
|
||||
$dest .= \pack(
|
||||
'CC',
|
||||
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
|
||||
(($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff
|
||||
);
|
||||
$err |= ($c0 | $c1 | $c2 | $c3) >> 8;
|
||||
if ($strictPadding) {
|
||||
$err |= ($c3 << 4) & 0xff;
|
||||
}
|
||||
} elseif ($i + 2 < $srcLen) {
|
||||
/** @var int $c1 */
|
||||
$c1 = static::$method($chunk[2]);
|
||||
/** @var int $c2 */
|
||||
$c2 = static::$method($chunk[3]);
|
||||
|
||||
$dest .= \pack(
|
||||
'CC',
|
||||
(($c0 << 3) | ($c1 >> 2) ) & 0xff,
|
||||
(($c1 << 6) | ($c2 << 1) ) & 0xff
|
||||
);
|
||||
$err |= ($c0 | $c1 | $c2) >> 8;
|
||||
if ($strictPadding) {
|
||||
$err |= ($c2 << 6) & 0xff;
|
||||
}
|
||||
} elseif ($i + 1 < $srcLen) {
|
||||
/** @var int $c1 */
|
||||
$c1 = static::$method($chunk[2]);
|
||||
|
||||
$dest .= \pack(
|
||||
'C',
|
||||
(($c0 << 3) | ($c1 >> 2) ) & 0xff
|
||||
);
|
||||
$err |= ($c0 | $c1) >> 8;
|
||||
if ($strictPadding) {
|
||||
$err |= ($c1 << 6) & 0xff;
|
||||
}
|
||||
} else {
|
||||
$dest .= \pack(
|
||||
'C',
|
||||
(($c0 << 3) ) & 0xff
|
||||
);
|
||||
$err |= ($c0) >> 8;
|
||||
}
|
||||
}
|
||||
$check = ($err === 0);
|
||||
if (!$check) {
|
||||
throw new RangeException(
|
||||
'Base32::doDecode() only expects characters in the correct base32 alphabet'
|
||||
);
|
||||
}
|
||||
return $dest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Base32 Encoding
|
||||
*
|
||||
* @param string $src
|
||||
* @param bool $upper
|
||||
* @param bool $pad
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
protected static function doEncode(string $src, bool $upper = false, $pad = true): string
|
||||
{
|
||||
// We do this to reduce code duplication:
|
||||
$method = $upper
|
||||
? 'encode5BitsUpper'
|
||||
: 'encode5Bits';
|
||||
|
||||
$dest = '';
|
||||
$srcLen = Binary::safeStrlen($src);
|
||||
|
||||
// Main loop (no padding):
|
||||
for ($i = 0; $i + 5 <= $srcLen; $i += 5) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C*', Binary::safeSubstr($src, $i, 5));
|
||||
$b0 = $chunk[1];
|
||||
$b1 = $chunk[2];
|
||||
$b2 = $chunk[3];
|
||||
$b3 = $chunk[4];
|
||||
$b4 = $chunk[5];
|
||||
$dest .=
|
||||
static::$method( ($b0 >> 3) & 31) .
|
||||
static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
|
||||
static::$method((($b1 >> 1) ) & 31) .
|
||||
static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .
|
||||
static::$method((($b2 << 1) | ($b3 >> 7)) & 31) .
|
||||
static::$method((($b3 >> 2) ) & 31) .
|
||||
static::$method((($b3 << 3) | ($b4 >> 5)) & 31) .
|
||||
static::$method( $b4 & 31);
|
||||
}
|
||||
// The last chunk, which may have padding:
|
||||
if ($i < $srcLen) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C*', Binary::safeSubstr($src, $i, $srcLen - $i));
|
||||
$b0 = $chunk[1];
|
||||
if ($i + 3 < $srcLen) {
|
||||
$b1 = $chunk[2];
|
||||
$b2 = $chunk[3];
|
||||
$b3 = $chunk[4];
|
||||
$dest .=
|
||||
static::$method( ($b0 >> 3) & 31) .
|
||||
static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
|
||||
static::$method((($b1 >> 1) ) & 31) .
|
||||
static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .
|
||||
static::$method((($b2 << 1) | ($b3 >> 7)) & 31) .
|
||||
static::$method((($b3 >> 2) ) & 31) .
|
||||
static::$method((($b3 << 3) ) & 31);
|
||||
if ($pad) {
|
||||
$dest .= '=';
|
||||
}
|
||||
} elseif ($i + 2 < $srcLen) {
|
||||
$b1 = $chunk[2];
|
||||
$b2 = $chunk[3];
|
||||
$dest .=
|
||||
static::$method( ($b0 >> 3) & 31) .
|
||||
static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
|
||||
static::$method((($b1 >> 1) ) & 31) .
|
||||
static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .
|
||||
static::$method((($b2 << 1) ) & 31);
|
||||
if ($pad) {
|
||||
$dest .= '===';
|
||||
}
|
||||
} elseif ($i + 1 < $srcLen) {
|
||||
$b1 = $chunk[2];
|
||||
$dest .=
|
||||
static::$method( ($b0 >> 3) & 31) .
|
||||
static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
|
||||
static::$method((($b1 >> 1) ) & 31) .
|
||||
static::$method((($b1 << 4) ) & 31);
|
||||
if ($pad) {
|
||||
$dest .= '====';
|
||||
}
|
||||
} else {
|
||||
$dest .=
|
||||
static::$method( ($b0 >> 3) & 31) .
|
||||
static::$method( ($b0 << 2) & 31);
|
||||
if ($pad) {
|
||||
$dest .= '======';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $dest;
|
||||
}
|
||||
}
|
||||
111
securemail/vendor/paragonie/constant_time_encoding/src/Base32Hex.php
vendored
Normal file
111
securemail/vendor/paragonie/constant_time_encoding/src/Base32Hex.php
vendored
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Base32Hex
|
||||
* [0-9][A-V]
|
||||
*
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class Base32Hex extends Base32
|
||||
{
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 5-bit integers
|
||||
* into 8-bit integers.
|
||||
*
|
||||
* @param int $src
|
||||
* @return int
|
||||
*/
|
||||
protected static function decode5Bits(int $src): int
|
||||
{
|
||||
$ret = -1;
|
||||
|
||||
// if ($src > 0x30 && $src < 0x3a) ret += $src - 0x2e + 1; // -47
|
||||
$ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src - 47);
|
||||
|
||||
// if ($src > 0x60 && $src < 0x77) ret += $src - 0x61 + 10 + 1; // -86
|
||||
$ret += (((0x60 - $src) & ($src - 0x77)) >> 8) & ($src - 86);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 5-bit integers
|
||||
* into 8-bit integers.
|
||||
*
|
||||
* @param int $src
|
||||
* @return int
|
||||
*/
|
||||
protected static function decode5BitsUpper(int $src): int
|
||||
{
|
||||
$ret = -1;
|
||||
|
||||
// if ($src > 0x30 && $src < 0x3a) ret += $src - 0x2e + 1; // -47
|
||||
$ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src - 47);
|
||||
|
||||
// if ($src > 0x40 && $src < 0x57) ret += $src - 0x41 + 10 + 1; // -54
|
||||
$ret += (((0x40 - $src) & ($src - 0x57)) >> 8) & ($src - 54);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
||||
* into 5-bit integers.
|
||||
*
|
||||
* @param int $src
|
||||
* @return string
|
||||
*/
|
||||
protected static function encode5Bits(int $src): string
|
||||
{
|
||||
$src += 0x30;
|
||||
|
||||
// if ($src > 0x39) $src += 0x61 - 0x3a; // 39
|
||||
$src += ((0x39 - $src) >> 8) & 39;
|
||||
|
||||
return \pack('C', $src);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
||||
* into 5-bit integers.
|
||||
*
|
||||
* Uppercase variant.
|
||||
*
|
||||
* @param int $src
|
||||
* @return string
|
||||
*/
|
||||
protected static function encode5BitsUpper(int $src): string
|
||||
{
|
||||
$src += 0x30;
|
||||
|
||||
// if ($src > 0x39) $src += 0x41 - 0x3a; // 7
|
||||
$src += ((0x39 - $src) >> 8) & 7;
|
||||
|
||||
return \pack('C', $src);
|
||||
}
|
||||
}
|
||||
314
securemail/vendor/paragonie/constant_time_encoding/src/Base64.php
vendored
Normal file
314
securemail/vendor/paragonie/constant_time_encoding/src/Base64.php
vendored
Normal file
|
|
@ -0,0 +1,314 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use RangeException;
|
||||
use TypeError;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Base64
|
||||
* [A-Z][a-z][0-9]+/
|
||||
*
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class Base64 implements EncoderInterface
|
||||
{
|
||||
/**
|
||||
* Encode into Base64
|
||||
*
|
||||
* Base64 character set "[A-Z][a-z][0-9]+/"
|
||||
*
|
||||
* @param string $binString
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function encode(string $binString): string
|
||||
{
|
||||
return static::doEncode($binString, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode into Base64, no = padding
|
||||
*
|
||||
* Base64 character set "[A-Z][a-z][0-9]+/"
|
||||
*
|
||||
* @param string $src
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function encodeUnpadded(string $src): string
|
||||
{
|
||||
return static::doEncode($src, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $src
|
||||
* @param bool $pad Include = padding?
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
protected static function doEncode(string $src, bool $pad = true): string
|
||||
{
|
||||
$dest = '';
|
||||
$srcLen = Binary::safeStrlen($src);
|
||||
// Main loop (no padding):
|
||||
for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C*', Binary::safeSubstr($src, $i, 3));
|
||||
$b0 = $chunk[1];
|
||||
$b1 = $chunk[2];
|
||||
$b2 = $chunk[3];
|
||||
|
||||
$dest .=
|
||||
static::encode6Bits( $b0 >> 2 ) .
|
||||
static::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
|
||||
static::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
|
||||
static::encode6Bits( $b2 & 63);
|
||||
}
|
||||
// The last chunk, which may have padding:
|
||||
if ($i < $srcLen) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C*', Binary::safeSubstr($src, $i, $srcLen - $i));
|
||||
$b0 = $chunk[1];
|
||||
if ($i + 1 < $srcLen) {
|
||||
$b1 = $chunk[2];
|
||||
$dest .=
|
||||
static::encode6Bits($b0 >> 2) .
|
||||
static::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
|
||||
static::encode6Bits(($b1 << 2) & 63);
|
||||
if ($pad) {
|
||||
$dest .= '=';
|
||||
}
|
||||
} else {
|
||||
$dest .=
|
||||
static::encode6Bits( $b0 >> 2) .
|
||||
static::encode6Bits(($b0 << 4) & 63);
|
||||
if ($pad) {
|
||||
$dest .= '==';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $dest;
|
||||
}
|
||||
|
||||
/**
|
||||
* decode from base64 into binary
|
||||
*
|
||||
* Base64 character set "./[A-Z][a-z][0-9]"
|
||||
*
|
||||
* @param string $encodedString
|
||||
* @param bool $strictPadding
|
||||
* @return string
|
||||
*
|
||||
* @throws RangeException
|
||||
* @throws TypeError
|
||||
* @psalm-suppress RedundantCondition
|
||||
*/
|
||||
public static function decode(string $encodedString, bool $strictPadding = false): string
|
||||
{
|
||||
// Remove padding
|
||||
$srcLen = Binary::safeStrlen($encodedString);
|
||||
if ($srcLen === 0) {
|
||||
return '';
|
||||
}
|
||||
|
||||
if ($strictPadding) {
|
||||
if (($srcLen & 3) === 0) {
|
||||
if ($encodedString[$srcLen - 1] === '=') {
|
||||
$srcLen--;
|
||||
if ($encodedString[$srcLen - 1] === '=') {
|
||||
$srcLen--;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (($srcLen & 3) === 1) {
|
||||
throw new RangeException(
|
||||
'Incorrect padding'
|
||||
);
|
||||
}
|
||||
if ($encodedString[$srcLen - 1] === '=') {
|
||||
throw new RangeException(
|
||||
'Incorrect padding'
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$encodedString = \rtrim($encodedString, '=');
|
||||
$srcLen = Binary::safeStrlen($encodedString);
|
||||
}
|
||||
|
||||
$err = 0;
|
||||
$dest = '';
|
||||
// Main loop (no padding):
|
||||
for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C*', Binary::safeSubstr($encodedString, $i, 4));
|
||||
$c0 = static::decode6Bits($chunk[1]);
|
||||
$c1 = static::decode6Bits($chunk[2]);
|
||||
$c2 = static::decode6Bits($chunk[3]);
|
||||
$c3 = static::decode6Bits($chunk[4]);
|
||||
|
||||
$dest .= \pack(
|
||||
'CCC',
|
||||
((($c0 << 2) | ($c1 >> 4)) & 0xff),
|
||||
((($c1 << 4) | ($c2 >> 2)) & 0xff),
|
||||
((($c2 << 6) | $c3 ) & 0xff)
|
||||
);
|
||||
$err |= ($c0 | $c1 | $c2 | $c3) >> 8;
|
||||
}
|
||||
// The last chunk, which may have padding:
|
||||
if ($i < $srcLen) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C*', Binary::safeSubstr($encodedString, $i, $srcLen - $i));
|
||||
$c0 = static::decode6Bits($chunk[1]);
|
||||
|
||||
if ($i + 2 < $srcLen) {
|
||||
$c1 = static::decode6Bits($chunk[2]);
|
||||
$c2 = static::decode6Bits($chunk[3]);
|
||||
$dest .= \pack(
|
||||
'CC',
|
||||
((($c0 << 2) | ($c1 >> 4)) & 0xff),
|
||||
((($c1 << 4) | ($c2 >> 2)) & 0xff)
|
||||
);
|
||||
$err |= ($c0 | $c1 | $c2) >> 8;
|
||||
if ($strictPadding) {
|
||||
$err |= ($c2 << 6) & 0xff;
|
||||
}
|
||||
} elseif ($i + 1 < $srcLen) {
|
||||
$c1 = static::decode6Bits($chunk[2]);
|
||||
$dest .= \pack(
|
||||
'C',
|
||||
((($c0 << 2) | ($c1 >> 4)) & 0xff)
|
||||
);
|
||||
$err |= ($c0 | $c1) >> 8;
|
||||
if ($strictPadding) {
|
||||
$err |= ($c1 << 4) & 0xff;
|
||||
}
|
||||
} elseif ($strictPadding) {
|
||||
$err |= 1;
|
||||
}
|
||||
}
|
||||
$check = ($err === 0);
|
||||
if (!$check) {
|
||||
throw new RangeException(
|
||||
'Base64::decode() only expects characters in the correct base64 alphabet'
|
||||
);
|
||||
}
|
||||
return $dest;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $encodedString
|
||||
* @return string
|
||||
*/
|
||||
public static function decodeNoPadding(string $encodedString): string
|
||||
{
|
||||
$srcLen = Binary::safeStrlen($encodedString);
|
||||
if ($srcLen === 0) {
|
||||
return '';
|
||||
}
|
||||
if (($srcLen & 3) === 0) {
|
||||
if ($encodedString[$srcLen - 1] === '=') {
|
||||
throw new InvalidArgumentException(
|
||||
"decodeNoPadding() doesn't tolerate padding"
|
||||
);
|
||||
}
|
||||
if (($srcLen & 3) > 1) {
|
||||
if ($encodedString[$srcLen - 2] === '=') {
|
||||
throw new InvalidArgumentException(
|
||||
"decodeNoPadding() doesn't tolerate padding"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
return static::decode(
|
||||
$encodedString,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 6-bit integers
|
||||
* into 8-bit integers.
|
||||
*
|
||||
* Base64 character set:
|
||||
* [A-Z] [a-z] [0-9] + /
|
||||
* 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
|
||||
*
|
||||
* @param int $src
|
||||
* @return int
|
||||
*/
|
||||
protected static function decode6Bits(int $src): int
|
||||
{
|
||||
$ret = -1;
|
||||
|
||||
// if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
|
||||
$ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);
|
||||
|
||||
// if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
|
||||
$ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);
|
||||
|
||||
// if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
|
||||
$ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);
|
||||
|
||||
// if ($src == 0x2b) $ret += 62 + 1;
|
||||
$ret += (((0x2a - $src) & ($src - 0x2c)) >> 8) & 63;
|
||||
|
||||
// if ($src == 0x2f) ret += 63 + 1;
|
||||
$ret += (((0x2e - $src) & ($src - 0x30)) >> 8) & 64;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
||||
* into 6-bit integers.
|
||||
*
|
||||
* @param int $src
|
||||
* @return string
|
||||
*/
|
||||
protected static function encode6Bits(int $src): string
|
||||
{
|
||||
$diff = 0x41;
|
||||
|
||||
// if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
|
||||
$diff += ((25 - $src) >> 8) & 6;
|
||||
|
||||
// if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
|
||||
$diff -= ((51 - $src) >> 8) & 75;
|
||||
|
||||
// if ($src > 61) $diff += 0x2b - 0x30 - 10; // -15
|
||||
$diff -= ((61 - $src) >> 8) & 15;
|
||||
|
||||
// if ($src > 62) $diff += 0x2f - 0x2b - 1; // 3
|
||||
$diff += ((62 - $src) >> 8) & 3;
|
||||
|
||||
return \pack('C', $src + $diff);
|
||||
}
|
||||
}
|
||||
88
securemail/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php
vendored
Normal file
88
securemail/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php
vendored
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Base64DotSlash
|
||||
* ./[A-Z][a-z][0-9]
|
||||
*
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class Base64DotSlash extends Base64
|
||||
{
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 6-bit integers
|
||||
* into 8-bit integers.
|
||||
*
|
||||
* Base64 character set:
|
||||
* ./ [A-Z] [a-z] [0-9]
|
||||
* 0x2e-0x2f, 0x41-0x5a, 0x61-0x7a, 0x30-0x39
|
||||
*
|
||||
* @param int $src
|
||||
* @return int
|
||||
*/
|
||||
protected static function decode6Bits(int $src): int
|
||||
{
|
||||
$ret = -1;
|
||||
|
||||
// if ($src > 0x2d && $src < 0x30) ret += $src - 0x2e + 1; // -45
|
||||
$ret += (((0x2d - $src) & ($src - 0x30)) >> 8) & ($src - 45);
|
||||
|
||||
// if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 2 + 1; // -62
|
||||
$ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 62);
|
||||
|
||||
// if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 28 + 1; // -68
|
||||
$ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 68);
|
||||
|
||||
// if ($src > 0x2f && $src < 0x3a) ret += $src - 0x30 + 54 + 1; // 7
|
||||
$ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 7);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
||||
* into 6-bit integers.
|
||||
*
|
||||
* @param int $src
|
||||
* @return string
|
||||
*/
|
||||
protected static function encode6Bits(int $src): string
|
||||
{
|
||||
$src += 0x2e;
|
||||
|
||||
// if ($src > 0x2f) $src += 0x41 - 0x30; // 17
|
||||
$src += ((0x2f - $src) >> 8) & 17;
|
||||
|
||||
// if ($src > 0x5a) $src += 0x61 - 0x5b; // 6
|
||||
$src += ((0x5a - $src) >> 8) & 6;
|
||||
|
||||
// if ($src > 0x7a) $src += 0x30 - 0x7b; // -75
|
||||
$src -= ((0x7a - $src) >> 8) & 75;
|
||||
|
||||
return \pack('C', $src);
|
||||
}
|
||||
}
|
||||
82
securemail/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php
vendored
Normal file
82
securemail/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php
vendored
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Base64DotSlashOrdered
|
||||
* ./[0-9][A-Z][a-z]
|
||||
*
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class Base64DotSlashOrdered extends Base64
|
||||
{
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 6-bit integers
|
||||
* into 8-bit integers.
|
||||
*
|
||||
* Base64 character set:
|
||||
* [.-9] [A-Z] [a-z]
|
||||
* 0x2e-0x39, 0x41-0x5a, 0x61-0x7a
|
||||
*
|
||||
* @param int $src
|
||||
* @return int
|
||||
*/
|
||||
protected static function decode6Bits(int $src): int
|
||||
{
|
||||
$ret = -1;
|
||||
|
||||
// if ($src > 0x2d && $src < 0x3a) ret += $src - 0x2e + 1; // -45
|
||||
$ret += (((0x2d - $src) & ($src - 0x3a)) >> 8) & ($src - 45);
|
||||
|
||||
// if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 12 + 1; // -52
|
||||
$ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 52);
|
||||
|
||||
// if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 38 + 1; // -58
|
||||
$ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 58);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
||||
* into 6-bit integers.
|
||||
*
|
||||
* @param int $src
|
||||
* @return string
|
||||
*/
|
||||
protected static function encode6Bits(int $src): string
|
||||
{
|
||||
$src += 0x2e;
|
||||
|
||||
// if ($src > 0x39) $src += 0x41 - 0x3a; // 7
|
||||
$src += ((0x39 - $src) >> 8) & 7;
|
||||
|
||||
// if ($src > 0x5a) $src += 0x61 - 0x5b; // 6
|
||||
$src += ((0x5a - $src) >> 8) & 6;
|
||||
|
||||
return \pack('C', $src);
|
||||
}
|
||||
}
|
||||
95
securemail/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php
vendored
Normal file
95
securemail/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php
vendored
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Base64UrlSafe
|
||||
* [A-Z][a-z][0-9]\-_
|
||||
*
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class Base64UrlSafe extends Base64
|
||||
{
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 6-bit integers
|
||||
* into 8-bit integers.
|
||||
*
|
||||
* Base64 character set:
|
||||
* [A-Z] [a-z] [0-9] - _
|
||||
* 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2d, 0x5f
|
||||
*
|
||||
* @param int $src
|
||||
* @return int
|
||||
*/
|
||||
protected static function decode6Bits(int $src): int
|
||||
{
|
||||
$ret = -1;
|
||||
|
||||
// if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
|
||||
$ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);
|
||||
|
||||
// if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
|
||||
$ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);
|
||||
|
||||
// if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
|
||||
$ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);
|
||||
|
||||
// if ($src == 0x2c) $ret += 62 + 1;
|
||||
$ret += (((0x2c - $src) & ($src - 0x2e)) >> 8) & 63;
|
||||
|
||||
// if ($src == 0x5f) ret += 63 + 1;
|
||||
$ret += (((0x5e - $src) & ($src - 0x60)) >> 8) & 64;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses bitwise operators instead of table-lookups to turn 8-bit integers
|
||||
* into 6-bit integers.
|
||||
*
|
||||
* @param int $src
|
||||
* @return string
|
||||
*/
|
||||
protected static function encode6Bits(int $src): string
|
||||
{
|
||||
$diff = 0x41;
|
||||
|
||||
// if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
|
||||
$diff += ((25 - $src) >> 8) & 6;
|
||||
|
||||
// if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
|
||||
$diff -= ((51 - $src) >> 8) & 75;
|
||||
|
||||
// if ($src > 61) $diff += 0x2d - 0x30 - 10; // -13
|
||||
$diff -= ((61 - $src) >> 8) & 13;
|
||||
|
||||
// if ($src > 62) $diff += 0x5f - 0x2b - 1; // 3
|
||||
$diff += ((62 - $src) >> 8) & 49;
|
||||
|
||||
return \pack('C', $src + $diff);
|
||||
}
|
||||
}
|
||||
90
securemail/vendor/paragonie/constant_time_encoding/src/Binary.php
vendored
Normal file
90
securemail/vendor/paragonie/constant_time_encoding/src/Binary.php
vendored
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
use TypeError;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Binary
|
||||
*
|
||||
* Binary string operators that don't choke on
|
||||
* mbstring.func_overload
|
||||
*
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class Binary
|
||||
{
|
||||
/**
|
||||
* Safe string length
|
||||
*
|
||||
* @ref mbstring.func_overload
|
||||
*
|
||||
* @param string $str
|
||||
* @return int
|
||||
*/
|
||||
public static function safeStrlen(string $str): int
|
||||
{
|
||||
if (\function_exists('mb_strlen')) {
|
||||
// mb_strlen in PHP 7.x can return false.
|
||||
/** @psalm-suppress RedundantCast */
|
||||
return (int) \mb_strlen($str, '8bit');
|
||||
} else {
|
||||
return \strlen($str);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Safe substring
|
||||
*
|
||||
* @ref mbstring.func_overload
|
||||
*
|
||||
* @staticvar boolean $exists
|
||||
* @param string $str
|
||||
* @param int $start
|
||||
* @param ?int $length
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function safeSubstr(
|
||||
string $str,
|
||||
int $start = 0,
|
||||
$length = null
|
||||
): string {
|
||||
if ($length === 0) {
|
||||
return '';
|
||||
}
|
||||
if (\function_exists('mb_substr')) {
|
||||
return \mb_substr($str, $start, $length, '8bit');
|
||||
}
|
||||
// Unlike mb_substr(), substr() doesn't accept NULL for length
|
||||
if ($length !== null) {
|
||||
return \substr($str, $start, $length);
|
||||
} else {
|
||||
return \substr($str, $start);
|
||||
}
|
||||
}
|
||||
}
|
||||
52
securemail/vendor/paragonie/constant_time_encoding/src/EncoderInterface.php
vendored
Normal file
52
securemail/vendor/paragonie/constant_time_encoding/src/EncoderInterface.php
vendored
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Interface EncoderInterface
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
interface EncoderInterface
|
||||
{
|
||||
/**
|
||||
* Convert a binary string into a hexadecimal string without cache-timing
|
||||
* leaks
|
||||
*
|
||||
* @param string $binString (raw binary)
|
||||
* @return string
|
||||
*/
|
||||
public static function encode(string $binString): string;
|
||||
|
||||
/**
|
||||
* Convert a binary string into a hexadecimal string without cache-timing
|
||||
* leaks
|
||||
*
|
||||
* @param string $encodedString
|
||||
* @param bool $strictPadding Error on invalid padding
|
||||
* @return string (raw binary)
|
||||
*/
|
||||
public static function decode(string $encodedString, bool $strictPadding = false): string;
|
||||
}
|
||||
262
securemail/vendor/paragonie/constant_time_encoding/src/Encoding.php
vendored
Normal file
262
securemail/vendor/paragonie/constant_time_encoding/src/Encoding.php
vendored
Normal file
|
|
@ -0,0 +1,262 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
use TypeError;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Encoding
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class Encoding
|
||||
{
|
||||
/**
|
||||
* RFC 4648 Base32 encoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32Encode(string $str): string
|
||||
{
|
||||
return Base32::encode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32 encoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32EncodeUpper(string $str): string
|
||||
{
|
||||
return Base32::encodeUpper($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32 decoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32Decode(string $str): string
|
||||
{
|
||||
return Base32::decode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32 decoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32DecodeUpper(string $str): string
|
||||
{
|
||||
return Base32::decodeUpper($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32 encoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32HexEncode(string $str): string
|
||||
{
|
||||
return Base32Hex::encode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32Hex encoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32HexEncodeUpper(string $str): string
|
||||
{
|
||||
return Base32Hex::encodeUpper($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32Hex decoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32HexDecode(string $str): string
|
||||
{
|
||||
return Base32Hex::decode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32Hex decoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32HexDecodeUpper(string $str): string
|
||||
{
|
||||
return Base32Hex::decodeUpper($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base64 encoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64Encode(string $str): string
|
||||
{
|
||||
return Base64::encode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base64 decoding
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64Decode(string $str): string
|
||||
{
|
||||
return Base64::decode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode into Base64
|
||||
*
|
||||
* Base64 character set "./[A-Z][a-z][0-9]"
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64EncodeDotSlash(string $str): string
|
||||
{
|
||||
return Base64DotSlash::encode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode from base64 to raw binary
|
||||
*
|
||||
* Base64 character set "./[A-Z][a-z][0-9]"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws \RangeException
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64DecodeDotSlash(string $str): string
|
||||
{
|
||||
return Base64DotSlash::decode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode into Base64
|
||||
*
|
||||
* Base64 character set "[.-9][A-Z][a-z]" or "./[0-9][A-Z][a-z]"
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64EncodeDotSlashOrdered(string $str): string
|
||||
{
|
||||
return Base64DotSlashOrdered::encode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode from base64 to raw binary
|
||||
*
|
||||
* Base64 character set "[.-9][A-Z][a-z]" or "./[0-9][A-Z][a-z]"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
* @throws \RangeException
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64DecodeDotSlashOrdered(string $str): string
|
||||
{
|
||||
return Base64DotSlashOrdered::decode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a binary string into a hexadecimal string without cache-timing
|
||||
* leaks
|
||||
*
|
||||
* @param string $bin_string (raw binary)
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function hexEncode(string $bin_string): string
|
||||
{
|
||||
return Hex::encode($bin_string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a hexadecimal string into a binary string without cache-timing
|
||||
* leaks
|
||||
*
|
||||
* @param string $hex_string
|
||||
* @return string (raw binary)
|
||||
* @throws \RangeException
|
||||
*/
|
||||
public static function hexDecode(string $hex_string): string
|
||||
{
|
||||
return Hex::decode($hex_string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a binary string into a hexadecimal string without cache-timing
|
||||
* leaks
|
||||
*
|
||||
* @param string $bin_string (raw binary)
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function hexEncodeUpper(string $bin_string): string
|
||||
{
|
||||
return Hex::encodeUpper($bin_string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a binary string into a hexadecimal string without cache-timing
|
||||
* leaks
|
||||
*
|
||||
* @param string $bin_string (raw binary)
|
||||
* @return string
|
||||
*/
|
||||
public static function hexDecodeUpper(string $bin_string): string
|
||||
{
|
||||
return Hex::decode($bin_string);
|
||||
}
|
||||
}
|
||||
146
securemail/vendor/paragonie/constant_time_encoding/src/Hex.php
vendored
Normal file
146
securemail/vendor/paragonie/constant_time_encoding/src/Hex.php
vendored
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
use RangeException;
|
||||
use TypeError;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Hex
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class Hex implements EncoderInterface
|
||||
{
|
||||
/**
|
||||
* Convert a binary string into a hexadecimal string without cache-timing
|
||||
* leaks
|
||||
*
|
||||
* @param string $binString (raw binary)
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function encode(string $binString): string
|
||||
{
|
||||
$hex = '';
|
||||
$len = Binary::safeStrlen($binString);
|
||||
for ($i = 0; $i < $len; ++$i) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C', $binString[$i]);
|
||||
$c = $chunk[1] & 0xf;
|
||||
$b = $chunk[1] >> 4;
|
||||
|
||||
$hex .= \pack(
|
||||
'CC',
|
||||
(87 + $b + ((($b - 10) >> 8) & ~38)),
|
||||
(87 + $c + ((($c - 10) >> 8) & ~38))
|
||||
);
|
||||
}
|
||||
return $hex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a binary string into a hexadecimal string without cache-timing
|
||||
* leaks, returning uppercase letters (as per RFC 4648)
|
||||
*
|
||||
* @param string $binString (raw binary)
|
||||
* @return string
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function encodeUpper(string $binString): string
|
||||
{
|
||||
$hex = '';
|
||||
$len = Binary::safeStrlen($binString);
|
||||
|
||||
for ($i = 0; $i < $len; ++$i) {
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C', $binString[$i]);
|
||||
$c = $chunk[1] & 0xf;
|
||||
$b = $chunk[1] >> 4;
|
||||
|
||||
$hex .= \pack(
|
||||
'CC',
|
||||
(55 + $b + ((($b - 10) >> 8) & ~6)),
|
||||
(55 + $c + ((($c - 10) >> 8) & ~6))
|
||||
);
|
||||
}
|
||||
return $hex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a hexadecimal string into a binary string without cache-timing
|
||||
* leaks
|
||||
*
|
||||
* @param string $encodedString
|
||||
* @param bool $strictPadding
|
||||
* @return string (raw binary)
|
||||
* @throws RangeException
|
||||
*/
|
||||
public static function decode(
|
||||
string $encodedString,
|
||||
bool $strictPadding = false
|
||||
): string {
|
||||
$hex_pos = 0;
|
||||
$bin = '';
|
||||
$c_acc = 0;
|
||||
$hex_len = Binary::safeStrlen($encodedString);
|
||||
$state = 0;
|
||||
if (($hex_len & 1) !== 0) {
|
||||
if ($strictPadding) {
|
||||
throw new RangeException(
|
||||
'Expected an even number of hexadecimal characters'
|
||||
);
|
||||
} else {
|
||||
$encodedString = '0' . $encodedString;
|
||||
++$hex_len;
|
||||
}
|
||||
}
|
||||
|
||||
/** @var array<int, int> $chunk */
|
||||
$chunk = \unpack('C*', $encodedString);
|
||||
while ($hex_pos < $hex_len) {
|
||||
++$hex_pos;
|
||||
$c = $chunk[$hex_pos];
|
||||
$c_num = $c ^ 48;
|
||||
$c_num0 = ($c_num - 10) >> 8;
|
||||
$c_alpha = ($c & ~32) - 55;
|
||||
$c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8;
|
||||
|
||||
if (($c_num0 | $c_alpha0) === 0) {
|
||||
throw new RangeException(
|
||||
'Expected hexadecimal character'
|
||||
);
|
||||
}
|
||||
$c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0);
|
||||
if ($state === 0) {
|
||||
$c_acc = $c_val * 16;
|
||||
} else {
|
||||
$bin .= \pack('C', $c_acc | $c_val);
|
||||
}
|
||||
$state ^= 1;
|
||||
}
|
||||
return $bin;
|
||||
}
|
||||
}
|
||||
186
securemail/vendor/paragonie/constant_time_encoding/src/RFC4648.php
vendored
Normal file
186
securemail/vendor/paragonie/constant_time_encoding/src/RFC4648.php
vendored
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
namespace ParagonIE\ConstantTime;
|
||||
|
||||
use TypeError;
|
||||
|
||||
/**
|
||||
* Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
|
||||
* Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class RFC4648
|
||||
*
|
||||
* This class conforms strictly to the RFC
|
||||
*
|
||||
* @package ParagonIE\ConstantTime
|
||||
*/
|
||||
abstract class RFC4648
|
||||
{
|
||||
/**
|
||||
* RFC 4648 Base64 encoding
|
||||
*
|
||||
* "foo" -> "Zm9v"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64Encode(string $str): string
|
||||
{
|
||||
return Base64::encode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base64 decoding
|
||||
*
|
||||
* "Zm9v" -> "foo"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64Decode(string $str): string
|
||||
{
|
||||
return Base64::decode($str, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base64 (URL Safe) encoding
|
||||
*
|
||||
* "foo" -> "Zm9v"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64UrlSafeEncode(string $str): string
|
||||
{
|
||||
return Base64UrlSafe::encode($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base64 (URL Safe) decoding
|
||||
*
|
||||
* "Zm9v" -> "foo"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base64UrlSafeDecode(string $str): string
|
||||
{
|
||||
return Base64UrlSafe::decode($str, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32 encoding
|
||||
*
|
||||
* "foo" -> "MZXW6==="
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32Encode(string $str): string
|
||||
{
|
||||
return Base32::encodeUpper($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32 encoding
|
||||
*
|
||||
* "MZXW6===" -> "foo"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32Decode(string $str): string
|
||||
{
|
||||
return Base32::decodeUpper($str, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32-Hex encoding
|
||||
*
|
||||
* "foo" -> "CPNMU==="
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32HexEncode(string $str): string
|
||||
{
|
||||
return Base32::encodeUpper($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base32-Hex decoding
|
||||
*
|
||||
* "CPNMU===" -> "foo"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base32HexDecode(string $str): string
|
||||
{
|
||||
return Base32::decodeUpper($str, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base16 decoding
|
||||
*
|
||||
* "foo" -> "666F6F"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*
|
||||
* @throws TypeError
|
||||
*/
|
||||
public static function base16Encode(string $str): string
|
||||
{
|
||||
return Hex::encodeUpper($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* RFC 4648 Base16 decoding
|
||||
*
|
||||
* "666F6F" -> "foo"
|
||||
*
|
||||
* @param string $str
|
||||
* @return string
|
||||
*/
|
||||
public static function base16Decode(string $str): string
|
||||
{
|
||||
return Hex::decode($str, true);
|
||||
}
|
||||
}
|
||||
7
securemail/vendor/phpseclib/phpseclib/AUTHORS
vendored
Normal file
7
securemail/vendor/phpseclib/phpseclib/AUTHORS
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
phpseclib Lead Developer: TerraFrost (Jim Wigginton)
|
||||
|
||||
phpseclib Developers: monnerat (Patrick Monnerat)
|
||||
bantu (Andreas Fischer)
|
||||
petrich (Hans-Jürgen Petrich)
|
||||
GrahamCampbell (Graham Campbell)
|
||||
hc-jworman
|
||||
15
securemail/vendor/phpseclib/phpseclib/BACKERS.md
vendored
Normal file
15
securemail/vendor/phpseclib/phpseclib/BACKERS.md
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
# Backers
|
||||
|
||||
phpseclib ongoing development is made possible by [Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme) and by contributions by users like you. Thank you.
|
||||
|
||||
## Backers
|
||||
|
||||
- Allan Simon
|
||||
- [ChargeOver](https://chargeover.com/)
|
||||
- Raghu Veer Dendukuri
|
||||
- Zane Hooper
|
||||
- [Setasign](https://www.setasign.com/)
|
||||
- [Charles Severance](https://github.com/csev)
|
||||
- [Rachel Fish](https://github.com/itsrachelfish)
|
||||
- Tharyrok
|
||||
- [cjhaas](https://github.com/cjhaas)
|
||||
20
securemail/vendor/phpseclib/phpseclib/LICENSE
vendored
Normal file
20
securemail/vendor/phpseclib/phpseclib/LICENSE
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Copyright (c) 2011-2019 TerraFrost and other contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
98
securemail/vendor/phpseclib/phpseclib/README.md
vendored
Normal file
98
securemail/vendor/phpseclib/phpseclib/README.md
vendored
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
# phpseclib - PHP Secure Communications Library
|
||||
|
||||
[](https://github.com/phpseclib/phpseclib)
|
||||
|
||||
## Supporting phpseclib
|
||||
|
||||
- [Become a backer or sponsor on Patreon](https://www.patreon.com/phpseclib)
|
||||
- [One-time donation via PayPal or crypto-currencies](http://sourceforge.net/donate/index.php?group_id=198487)
|
||||
- [Subscribe to Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme)
|
||||
|
||||
## Introduction
|
||||
|
||||
MIT-licensed pure-PHP implementations of the following:
|
||||
|
||||
SSH-2, SFTP, X.509, an arbitrary-precision integer arithmetic library, Ed25519 / Ed449 / Curve25519 / Curve449, ECDSA / ECDH (with support for 66 curves), RSA (PKCS#1 v2.2 compliant), DSA / DH, DES / 3DES / RC4 / Rijndael / AES / Blowfish / Twofish / Salsa20 / ChaCha20, GCM / Poly1305
|
||||
|
||||
* [Browse Git](https://github.com/phpseclib/phpseclib)
|
||||
|
||||
## Documentation
|
||||
|
||||
* [Documentation / Manual](https://phpseclib.com/)
|
||||
* [API Documentation](https://api.phpseclib.com/3.0/) (generated by Doctum)
|
||||
|
||||
## Branches
|
||||
|
||||
### master
|
||||
|
||||
* Development Branch
|
||||
* Unstable API
|
||||
* Do not use in production
|
||||
|
||||
### 3.0
|
||||
|
||||
* Long term support (LTS) release
|
||||
* Major expansion of cryptographic primitives
|
||||
* Minimum PHP version: 5.6.1
|
||||
* PSR-4 autoloading with namespace rooted at `\phpseclib3`
|
||||
* Install via Composer: `composer require phpseclib/phpseclib:~3.0`
|
||||
|
||||
### 2.0
|
||||
|
||||
* Long term support (LTS) release
|
||||
* Modernized version of 1.0
|
||||
* Minimum PHP version: 5.3.3
|
||||
* PSR-4 autoloading with namespace rooted at `\phpseclib`
|
||||
* Install via Composer: `composer require phpseclib/phpseclib:~2.0`
|
||||
|
||||
### 1.0
|
||||
|
||||
* Long term support (LTS) release
|
||||
* PHP4 compatible
|
||||
* Composer compatible (PSR-0 autoloading)
|
||||
* Install using Composer: `composer require phpseclib/phpseclib:~1.0`
|
||||
* Install using PEAR: See [phpseclib PEAR Channel Documentation](http://phpseclib.sourceforge.net/pear.htm)
|
||||
* [Download 1.0.20 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.20.zip/download)
|
||||
|
||||
## Security contact information
|
||||
|
||||
To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
|
||||
|
||||
## Support
|
||||
|
||||
Need Support?
|
||||
|
||||
* [Checkout Questions and Answers on Stack Overflow](http://stackoverflow.com/questions/tagged/phpseclib)
|
||||
* [Create a Support Ticket on GitHub](https://github.com/phpseclib/phpseclib/issues/new)
|
||||
* [Browse the Support Forum](http://www.frostjedi.com/phpbb/viewforum.php?f=46) (no longer in use)
|
||||
|
||||
## Special Thanks
|
||||
|
||||
Special Thanks to our $50+ sponsors!:
|
||||
|
||||
- Allan Simon
|
||||
- [ChargeOver](https://chargeover.com/)
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the Project
|
||||
|
||||
2. Ensure you have Composer installed (see [Composer Download Instructions](https://getcomposer.org/download/))
|
||||
|
||||
3. Install Development Dependencies
|
||||
```sh
|
||||
composer install
|
||||
```
|
||||
|
||||
4. Create a Feature Branch
|
||||
|
||||
5. Run continuous integration checks:
|
||||
```sh
|
||||
composer global require php:^8.1 squizlabs/php_codesniffer friendsofphp/php-cs-fixer vimeo/psalm
|
||||
phpcs --standard=build/php_codesniffer.xml
|
||||
php-cs-fixer fix --config=build/php-cs-fixer.php --diff --dry-run --using-cache=no
|
||||
psalm --config=build/psalm.xml --no-cache --long-progress --report-show-info=false --output-format=text
|
||||
vendor/bin/phpunit --verbose --configuration tests/phpunit.xml
|
||||
```
|
||||
|
||||
6. Send us a Pull Request
|
||||
84
securemail/vendor/phpseclib/phpseclib/composer.json
vendored
Normal file
84
securemail/vendor/phpseclib/phpseclib/composer.json
vendored
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
{
|
||||
"name": "phpseclib/phpseclib",
|
||||
"type": "library",
|
||||
"description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
|
||||
"keywords": [
|
||||
"security",
|
||||
"crypto",
|
||||
"cryptography",
|
||||
"encryption",
|
||||
"signature",
|
||||
"signing",
|
||||
"rsa",
|
||||
"aes",
|
||||
"blowfish",
|
||||
"twofish",
|
||||
"ssh",
|
||||
"sftp",
|
||||
"x509",
|
||||
"x.509",
|
||||
"asn1",
|
||||
"asn.1",
|
||||
"BigInteger"
|
||||
],
|
||||
"homepage": "http://phpseclib.sourceforge.net",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jim Wigginton",
|
||||
"email": "terrafrost@php.net",
|
||||
"role": "Lead Developer"
|
||||
},
|
||||
{
|
||||
"name": "Patrick Monnerat",
|
||||
"email": "pm@datasphere.ch",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Andreas Fischer",
|
||||
"email": "bantu@phpbb.com",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Hans-Jürgen Petrich",
|
||||
"email": "petrich@tronic-media.com",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "graham@alt-three.com",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.6.1",
|
||||
"paragonie/constant_time_encoding": "^1|^2",
|
||||
"paragonie/random_compat": "^1.4|^2.0|^9.99.99"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
|
||||
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.",
|
||||
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
|
||||
"ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
|
||||
"ext-dom": "Install the DOM extension to load XML formatted public keys."
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"phpseclib/bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"phpseclib3\\": "phpseclib/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"phpseclib3\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
}
|
||||
}
|
||||
505
securemail/vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Strings.php
vendored
Normal file
505
securemail/vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Strings.php
vendored
Normal file
|
|
@ -0,0 +1,505 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Common String Functions
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright 2016 Jim Wigginton
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
namespace phpseclib3\Common\Functions;
|
||||
|
||||
use ParagonIE\ConstantTime\Base64;
|
||||
use ParagonIE\ConstantTime\Base64UrlSafe;
|
||||
use ParagonIE\ConstantTime\Hex;
|
||||
use phpseclib3\Math\BigInteger;
|
||||
use phpseclib3\Math\Common\FiniteField;
|
||||
|
||||
/**
|
||||
* Common String Functions
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
*/
|
||||
abstract class Strings
|
||||
{
|
||||
/**
|
||||
* String Shift
|
||||
*
|
||||
* Inspired by array_shift
|
||||
*
|
||||
* @param string $string
|
||||
* @param int $index
|
||||
* @return string
|
||||
*/
|
||||
public static function shift(&$string, $index = 1)
|
||||
{
|
||||
$substr = substr($string, 0, $index);
|
||||
$string = substr($string, $index);
|
||||
return $substr;
|
||||
}
|
||||
|
||||
/**
|
||||
* String Pop
|
||||
*
|
||||
* Inspired by array_pop
|
||||
*
|
||||
* @param string $string
|
||||
* @param int $index
|
||||
* @return string
|
||||
*/
|
||||
public static function pop(&$string, $index = 1)
|
||||
{
|
||||
$substr = substr($string, -$index);
|
||||
$string = substr($string, 0, -$index);
|
||||
return $substr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse SSH2-style string
|
||||
*
|
||||
* Returns either an array or a boolean if $data is malformed.
|
||||
*
|
||||
* Valid characters for $format are as follows:
|
||||
*
|
||||
* C = byte
|
||||
* b = boolean (true/false)
|
||||
* N = uint32
|
||||
* Q = uint64
|
||||
* s = string
|
||||
* i = mpint
|
||||
* L = name-list
|
||||
*
|
||||
* uint64 is not supported.
|
||||
*
|
||||
* @param string $format
|
||||
* @param string $data
|
||||
* @return mixed
|
||||
*/
|
||||
public static function unpackSSH2($format, &$data)
|
||||
{
|
||||
$format = self::formatPack($format);
|
||||
$result = [];
|
||||
for ($i = 0; $i < strlen($format); $i++) {
|
||||
switch ($format[$i]) {
|
||||
case 'C':
|
||||
case 'b':
|
||||
if (!strlen($data)) {
|
||||
throw new \LengthException('At least one byte needs to be present for successful C / b decodes');
|
||||
}
|
||||
break;
|
||||
case 'N':
|
||||
case 'i':
|
||||
case 's':
|
||||
case 'L':
|
||||
if (strlen($data) < 4) {
|
||||
throw new \LengthException('At least four byte needs to be present for successful N / i / s / L decodes');
|
||||
}
|
||||
break;
|
||||
case 'Q':
|
||||
if (strlen($data) < 8) {
|
||||
throw new \LengthException('At least eight byte needs to be present for successful N / i / s / L decodes');
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new \InvalidArgumentException('$format contains an invalid character');
|
||||
}
|
||||
switch ($format[$i]) {
|
||||
case 'C':
|
||||
$result[] = ord(self::shift($data));
|
||||
continue 2;
|
||||
case 'b':
|
||||
$result[] = ord(self::shift($data)) != 0;
|
||||
continue 2;
|
||||
case 'N':
|
||||
list(, $temp) = unpack('N', self::shift($data, 4));
|
||||
$result[] = $temp;
|
||||
continue 2;
|
||||
case 'Q':
|
||||
// pack() added support for Q in PHP 5.6.3 and PHP 5.6 is phpseclib 3's minimum version
|
||||
// so in theory we could support this BUT, "64-bit format codes are not available for
|
||||
// 32-bit versions" and phpseclib works on 32-bit installs. on 32-bit installs
|
||||
// 64-bit floats can be used to get larger numbers then 32-bit signed ints would allow
|
||||
// for. sure, you're not gonna get the full precision of 64-bit numbers but just because
|
||||
// you need > 32-bit precision doesn't mean you need the full 64-bit precision
|
||||
extract(unpack('Nupper/Nlower', self::shift($data, 8)));
|
||||
$temp = $upper ? 4294967296 * $upper : 0;
|
||||
$temp += $lower < 0 ? ($lower & 0x7FFFFFFFF) + 0x80000000 : $lower;
|
||||
// $temp = hexdec(bin2hex(self::shift($data, 8)));
|
||||
$result[] = $temp;
|
||||
continue 2;
|
||||
}
|
||||
list(, $length) = unpack('N', self::shift($data, 4));
|
||||
if (strlen($data) < $length) {
|
||||
throw new \LengthException("$length bytes needed; " . strlen($data) . ' bytes available');
|
||||
}
|
||||
$temp = self::shift($data, $length);
|
||||
switch ($format[$i]) {
|
||||
case 'i':
|
||||
$result[] = new BigInteger($temp, -256);
|
||||
break;
|
||||
case 's':
|
||||
$result[] = $temp;
|
||||
break;
|
||||
case 'L':
|
||||
$result[] = explode(',', $temp);
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create SSH2-style string
|
||||
*
|
||||
* @param string $format
|
||||
* @param string|int|float|array|bool ...$elements
|
||||
* @return string
|
||||
*/
|
||||
public static function packSSH2($format, ...$elements)
|
||||
{
|
||||
$format = self::formatPack($format);
|
||||
if (strlen($format) != count($elements)) {
|
||||
throw new \InvalidArgumentException('There must be as many arguments as there are characters in the $format string');
|
||||
}
|
||||
$result = '';
|
||||
for ($i = 0; $i < strlen($format); $i++) {
|
||||
$element = $elements[$i];
|
||||
switch ($format[$i]) {
|
||||
case 'C':
|
||||
if (!is_int($element)) {
|
||||
throw new \InvalidArgumentException('Bytes must be represented as an integer between 0 and 255, inclusive.');
|
||||
}
|
||||
$result .= pack('C', $element);
|
||||
break;
|
||||
case 'b':
|
||||
if (!is_bool($element)) {
|
||||
throw new \InvalidArgumentException('A boolean parameter was expected.');
|
||||
}
|
||||
$result .= $element ? "\1" : "\0";
|
||||
break;
|
||||
case 'Q':
|
||||
if (!is_int($element) && !is_float($element)) {
|
||||
throw new \InvalidArgumentException('An integer was expected.');
|
||||
}
|
||||
// 4294967296 == 1 << 32
|
||||
$result .= pack('NN', $element / 4294967296, $element);
|
||||
break;
|
||||
case 'N':
|
||||
if (is_float($element)) {
|
||||
$element = (int) $element;
|
||||
}
|
||||
if (!is_int($element)) {
|
||||
throw new \InvalidArgumentException('An integer was expected.');
|
||||
}
|
||||
$result .= pack('N', $element);
|
||||
break;
|
||||
case 's':
|
||||
if (!self::is_stringable($element)) {
|
||||
throw new \InvalidArgumentException('A string was expected.');
|
||||
}
|
||||
$result .= pack('Na*', strlen($element), $element);
|
||||
break;
|
||||
case 'i':
|
||||
if (!$element instanceof BigInteger && !$element instanceof FiniteField\Integer) {
|
||||
throw new \InvalidArgumentException('A phpseclib3\Math\BigInteger or phpseclib3\Math\Common\FiniteField\Integer object was expected.');
|
||||
}
|
||||
$element = $element->toBytes(true);
|
||||
$result .= pack('Na*', strlen($element), $element);
|
||||
break;
|
||||
case 'L':
|
||||
if (!is_array($element)) {
|
||||
throw new \InvalidArgumentException('An array was expected.');
|
||||
}
|
||||
$element = implode(',', $element);
|
||||
$result .= pack('Na*', strlen($element), $element);
|
||||
break;
|
||||
default:
|
||||
throw new \InvalidArgumentException('$format contains an invalid character');
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Expand a pack string
|
||||
*
|
||||
* Converts C5 to CCCCC, for example.
|
||||
*
|
||||
* @param string $format
|
||||
* @return string
|
||||
*/
|
||||
private static function formatPack($format)
|
||||
{
|
||||
$parts = preg_split('#(\d+)#', $format, -1, PREG_SPLIT_DELIM_CAPTURE);
|
||||
$format = '';
|
||||
for ($i = 1; $i < count($parts); $i += 2) {
|
||||
$format .= substr($parts[$i - 1], 0, -1) . str_repeat(substr($parts[$i - 1], -1), $parts[$i]);
|
||||
}
|
||||
$format .= $parts[$i - 1];
|
||||
|
||||
return $format;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert binary data into bits
|
||||
*
|
||||
* bin2hex / hex2bin refer to base-256 encoded data as binary, whilst
|
||||
* decbin / bindec refer to base-2 encoded data as binary. For the purposes
|
||||
* of this function, bin refers to base-256 encoded data whilst bits refers
|
||||
* to base-2 encoded data
|
||||
*
|
||||
* @param string $x
|
||||
* @return string
|
||||
*/
|
||||
public static function bits2bin($x)
|
||||
{
|
||||
/*
|
||||
// the pure-PHP approach is faster than the GMP approach
|
||||
if (function_exists('gmp_export')) {
|
||||
return strlen($x) ? gmp_export(gmp_init($x, 2)) : gmp_init(0);
|
||||
}
|
||||
*/
|
||||
|
||||
if (preg_match('#[^01]#', $x)) {
|
||||
throw new \RuntimeException('The only valid characters are 0 and 1');
|
||||
}
|
||||
|
||||
if (!defined('PHP_INT_MIN')) {
|
||||
define('PHP_INT_MIN', ~PHP_INT_MAX);
|
||||
}
|
||||
|
||||
$length = strlen($x);
|
||||
if (!$length) {
|
||||
return '';
|
||||
}
|
||||
$block_size = PHP_INT_SIZE << 3;
|
||||
$pad = $block_size - ($length % $block_size);
|
||||
if ($pad != $block_size) {
|
||||
$x = str_repeat('0', $pad) . $x;
|
||||
}
|
||||
|
||||
$parts = str_split($x, $block_size);
|
||||
$str = '';
|
||||
foreach ($parts as $part) {
|
||||
$xor = $part[0] == '1' ? PHP_INT_MIN : 0;
|
||||
$part[0] = '0';
|
||||
$str .= pack(
|
||||
PHP_INT_SIZE == 4 ? 'N' : 'J',
|
||||
$xor ^ eval('return 0b' . $part . ';')
|
||||
);
|
||||
}
|
||||
return ltrim($str, "\0");
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert bits to binary data
|
||||
*
|
||||
* @param string $x
|
||||
* @return string
|
||||
*/
|
||||
public static function bin2bits($x, $trim = true)
|
||||
{
|
||||
/*
|
||||
// the pure-PHP approach is slower than the GMP approach BUT
|
||||
// i want to the pure-PHP version to be easily unit tested as well
|
||||
if (function_exists('gmp_import')) {
|
||||
return gmp_strval(gmp_import($x), 2);
|
||||
}
|
||||
*/
|
||||
|
||||
$len = strlen($x);
|
||||
$mod = $len % PHP_INT_SIZE;
|
||||
if ($mod) {
|
||||
$x = str_pad($x, $len + PHP_INT_SIZE - $mod, "\0", STR_PAD_LEFT);
|
||||
}
|
||||
|
||||
$bits = '';
|
||||
if (PHP_INT_SIZE == 4) {
|
||||
$digits = unpack('N*', $x);
|
||||
foreach ($digits as $digit) {
|
||||
$bits .= sprintf('%032b', $digit);
|
||||
}
|
||||
} else {
|
||||
$digits = unpack('J*', $x);
|
||||
foreach ($digits as $digit) {
|
||||
$bits .= sprintf('%064b', $digit);
|
||||
}
|
||||
}
|
||||
|
||||
return $trim ? ltrim($bits, '0') : $bits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch Endianness Bit Order
|
||||
*
|
||||
* @param string $x
|
||||
* @return string
|
||||
*/
|
||||
public static function switchEndianness($x)
|
||||
{
|
||||
$r = '';
|
||||
for ($i = strlen($x) - 1; $i >= 0; $i--) {
|
||||
$b = ord($x[$i]);
|
||||
if (PHP_INT_SIZE === 8) {
|
||||
// 3 operations
|
||||
// from http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64BitsDiv
|
||||
$r .= chr((($b * 0x0202020202) & 0x010884422010) % 1023);
|
||||
} else {
|
||||
// 7 operations
|
||||
// from http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits
|
||||
$p1 = ($b * 0x0802) & 0x22110;
|
||||
$p2 = ($b * 0x8020) & 0x88440;
|
||||
$r .= chr(
|
||||
(($p1 | $p2) * 0x10101) >> 16
|
||||
);
|
||||
}
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment the current string
|
||||
*
|
||||
* @param string $var
|
||||
* @return string
|
||||
*/
|
||||
public static function increment_str(&$var)
|
||||
{
|
||||
if (function_exists('sodium_increment')) {
|
||||
$var = strrev($var);
|
||||
sodium_increment($var);
|
||||
$var = strrev($var);
|
||||
return $var;
|
||||
}
|
||||
|
||||
for ($i = 4; $i <= strlen($var); $i += 4) {
|
||||
$temp = substr($var, -$i, 4);
|
||||
switch ($temp) {
|
||||
case "\xFF\xFF\xFF\xFF":
|
||||
$var = substr_replace($var, "\x00\x00\x00\x00", -$i, 4);
|
||||
break;
|
||||
case "\x7F\xFF\xFF\xFF":
|
||||
$var = substr_replace($var, "\x80\x00\x00\x00", -$i, 4);
|
||||
return $var;
|
||||
default:
|
||||
$temp = unpack('Nnum', $temp);
|
||||
$var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4);
|
||||
return $var;
|
||||
}
|
||||
}
|
||||
|
||||
$remainder = strlen($var) % 4;
|
||||
|
||||
if ($remainder == 0) {
|
||||
return $var;
|
||||
}
|
||||
|
||||
$temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, "\0", STR_PAD_LEFT));
|
||||
$temp = substr(pack('N', $temp['num'] + 1), -$remainder);
|
||||
$var = substr_replace($var, $temp, 0, $remainder);
|
||||
|
||||
return $var;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find whether the type of a variable is string (or could be converted to one)
|
||||
*
|
||||
* @param mixed $var
|
||||
* @return bool
|
||||
* @psalm-assert-if-true string|\Stringable $var
|
||||
*/
|
||||
public static function is_stringable($var)
|
||||
{
|
||||
return is_string($var) || (is_object($var) && method_exists($var, '__toString'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Constant Time Base64-decoding
|
||||
*
|
||||
* ParagoneIE\ConstantTime doesn't use libsodium if it's available so we'll do so
|
||||
* ourselves. see https://github.com/paragonie/constant_time_encoding/issues/39
|
||||
*
|
||||
* @param string $data
|
||||
* @return string
|
||||
*/
|
||||
public static function base64_decode($data)
|
||||
{
|
||||
return function_exists('sodium_base642bin') ?
|
||||
sodium_base642bin($data, SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING, '=') :
|
||||
Base64::decode($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constant Time Base64-decoding (URL safe)
|
||||
*
|
||||
* @param string $data
|
||||
* @return string
|
||||
*/
|
||||
public static function base64url_decode($data)
|
||||
{
|
||||
// return self::base64_decode(str_replace(['-', '_'], ['+', '/'], $data));
|
||||
|
||||
return function_exists('sodium_base642bin') ?
|
||||
sodium_base642bin($data, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING, '=') :
|
||||
Base64UrlSafe::decode($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constant Time Base64-encoding
|
||||
*
|
||||
* @param string $data
|
||||
* @return string
|
||||
*/
|
||||
public static function base64_encode($data)
|
||||
{
|
||||
return function_exists('sodium_bin2base64') ?
|
||||
sodium_bin2base64($data, SODIUM_BASE64_VARIANT_ORIGINAL) :
|
||||
Base64::encode($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constant Time Base64-encoding (URL safe)
|
||||
*
|
||||
* @param string $data
|
||||
* @return string
|
||||
*/
|
||||
public static function base64url_encode($data)
|
||||
{
|
||||
// return str_replace(['+', '/'], ['-', '_'], self::base64_encode($data));
|
||||
|
||||
return function_exists('sodium_bin2base64') ?
|
||||
sodium_bin2base64($data, SODIUM_BASE64_VARIANT_URLSAFE) :
|
||||
Base64UrlSafe::encode($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constant Time Hex Decoder
|
||||
*
|
||||
* @param string $data
|
||||
* @return string
|
||||
*/
|
||||
public static function hex2bin($data)
|
||||
{
|
||||
return function_exists('sodium_hex2bin') ?
|
||||
sodium_hex2bin($data) :
|
||||
Hex::decode($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constant Time Hex Encoder
|
||||
*
|
||||
* @param string $data
|
||||
* @return string
|
||||
*/
|
||||
public static function bin2hex($data)
|
||||
{
|
||||
return function_exists('sodium_bin2hex') ?
|
||||
sodium_bin2hex($data) :
|
||||
Hex::encode($data);
|
||||
}
|
||||
}
|
||||
116
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php
vendored
Normal file
116
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php
vendored
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Pure-PHP implementation of AES.
|
||||
*
|
||||
* Uses mcrypt, if available/possible, and an internal implementation, otherwise.
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* NOTE: Since AES.php is (for compatibility and phpseclib-historical reasons) virtually
|
||||
* just a wrapper to Rijndael.php you may consider using Rijndael.php instead of
|
||||
* to save one include_once().
|
||||
*
|
||||
* If {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
|
||||
* {@link self::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's 136-bits
|
||||
* it'll be null-padded to 192-bits and 192 bits will be the key length until {@link self::setKey() setKey()}
|
||||
* is called, again, at which point, it'll be recalculated.
|
||||
*
|
||||
* Since \phpseclib3\Crypt\AES extends \phpseclib3\Crypt\Rijndael, some functions are available to be called that, in the context of AES, don't
|
||||
* make a whole lot of sense. {@link self::setBlockLength() setBlockLength()}, for instance. Calling that function,
|
||||
* however possible, won't do anything (AES has a fixed block length whereas Rijndael has a variable one).
|
||||
*
|
||||
* Here's a short example of how to use this library:
|
||||
* <code>
|
||||
* <?php
|
||||
* include 'vendor/autoload.php';
|
||||
*
|
||||
* $aes = new \phpseclib3\Crypt\AES('ctr');
|
||||
*
|
||||
* $aes->setKey('abcdefghijklmnop');
|
||||
*
|
||||
* $size = 10 * 1024;
|
||||
* $plaintext = '';
|
||||
* for ($i = 0; $i < $size; $i++) {
|
||||
* $plaintext.= 'a';
|
||||
* }
|
||||
*
|
||||
* echo $aes->decrypt($aes->encrypt($plaintext));
|
||||
* ?>
|
||||
* </code>
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright 2008 Jim Wigginton
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
namespace phpseclib3\Crypt;
|
||||
|
||||
/**
|
||||
* Pure-PHP implementation of AES.
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
*/
|
||||
class AES extends Rijndael
|
||||
{
|
||||
/**
|
||||
* Dummy function
|
||||
*
|
||||
* Since \phpseclib3\Crypt\AES extends \phpseclib3\Crypt\Rijndael, this function is, technically, available, but it doesn't do anything.
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Rijndael::setBlockLength()
|
||||
* @param int $length
|
||||
* @throws \BadMethodCallException anytime it's called
|
||||
*/
|
||||
public function setBlockLength($length)
|
||||
{
|
||||
throw new \BadMethodCallException('The block length cannot be set for AES.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the key length
|
||||
*
|
||||
* Valid key lengths are 128, 192, and 256. Set the link to bool(false) to disable a fixed key length
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Rijndael:setKeyLength()
|
||||
* @param int $length
|
||||
* @throws \LengthException if the key length isn't supported
|
||||
*/
|
||||
public function setKeyLength($length)
|
||||
{
|
||||
switch ($length) {
|
||||
case 128:
|
||||
case 192:
|
||||
case 256:
|
||||
break;
|
||||
default:
|
||||
throw new \LengthException('Key of size ' . $length . ' not supported by this algorithm. Only keys of sizes 128, 192 or 256 supported');
|
||||
}
|
||||
parent::setKeyLength($length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the key.
|
||||
*
|
||||
* Rijndael supports five different key lengths, AES only supports three.
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Rijndael:setKey()
|
||||
* @see setKeyLength()
|
||||
* @param string $key
|
||||
* @throws \LengthException if the key length isn't supported
|
||||
*/
|
||||
public function setKey($key)
|
||||
{
|
||||
switch (strlen($key)) {
|
||||
case 16:
|
||||
case 24:
|
||||
case 32:
|
||||
break;
|
||||
default:
|
||||
throw new \LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported');
|
||||
}
|
||||
|
||||
parent::setKey($key);
|
||||
}
|
||||
}
|
||||
918
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php
vendored
Normal file
918
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php
vendored
Normal file
|
|
@ -0,0 +1,918 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Pure-PHP implementation of Blowfish.
|
||||
*
|
||||
* Uses mcrypt, if available, and an internal implementation, otherwise.
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* Useful resources are as follows:
|
||||
*
|
||||
* - {@link http://en.wikipedia.org/wiki/Blowfish_(cipher) Wikipedia description of Blowfish}
|
||||
*
|
||||
* # An overview of bcrypt vs Blowfish
|
||||
*
|
||||
* OpenSSH private keys use a customized version of bcrypt. Specifically, instead of
|
||||
* encrypting OrpheanBeholderScryDoubt 64 times OpenSSH's bcrypt variant encrypts
|
||||
* OxychromaticBlowfishSwatDynamite 64 times. so we can't use crypt().
|
||||
*
|
||||
* bcrypt is basically Blowfish but instead of performing the key expansion once it performs
|
||||
* the expansion 129 times for each round, with the first key expansion interleaving the salt
|
||||
* and password. This renders OpenSSL unusable and forces us to use a pure-PHP implementation
|
||||
* of blowfish.
|
||||
*
|
||||
* # phpseclib's four different _encryptBlock() implementations
|
||||
*
|
||||
* When using Blowfish as an encryption algorithm, _encryptBlock() is called 9 + 512 +
|
||||
* (the number of blocks in the plaintext) times.
|
||||
*
|
||||
* Each of the first 9 calls to _encryptBlock() modify the P-array. Each of the next 512
|
||||
* calls modify the S-boxes. The remaining _encryptBlock() calls operate on the plaintext to
|
||||
* produce the ciphertext. In the pure-PHP implementation of Blowfish these remaining
|
||||
* _encryptBlock() calls are highly optimized through the use of eval(). Among other things,
|
||||
* P-array lookups are eliminated by hard-coding the key-dependent P-array values, and thus we
|
||||
* have explained 2 of the 4 different _encryptBlock() implementations.
|
||||
*
|
||||
* With bcrypt things are a bit different. _encryptBlock() is called 1,079,296 times,
|
||||
* assuming 16 rounds (which is what OpenSSH's bcrypt defaults to). The eval()-optimized
|
||||
* _encryptBlock() isn't as beneficial because the P-array values are not constant. Well, they
|
||||
* are constant, but only for, at most, 777 _encryptBlock() calls, which is equivalent to ~6KB
|
||||
* of data. The average length of back to back _encryptBlock() calls with a fixed P-array is
|
||||
* 514.12, which is ~4KB of data. Creating an eval()-optimized _encryptBlock() has an upfront
|
||||
* cost, which is CPU dependent and is probably not going to be worth it for just ~4KB of
|
||||
* data. Conseqeuently, bcrypt does not benefit from the eval()-optimized _encryptBlock().
|
||||
*
|
||||
* The regular _encryptBlock() does unpack() and pack() on every call, as well, and that can
|
||||
* begin to add up after one million function calls.
|
||||
*
|
||||
* In theory, one might think that it might be beneficial to rewrite all block ciphers so
|
||||
* that, instead of passing strings to _encryptBlock(), you convert the string to an array of
|
||||
* integers and then pass successive subarrays of that array to _encryptBlock. This, however,
|
||||
* kills PHP's memory use. Like let's say you have a 1MB long string. After doing
|
||||
* $in = str_repeat('a', 1024 * 1024); PHP's memory utilization jumps up by ~1MB. After doing
|
||||
* $blocks = str_split($in, 4); it jumps up by an additional ~16MB. After
|
||||
* $blocks = array_map(fn($x) => unpack('N*', $x), $blocks); it jumps up by an additional
|
||||
* ~90MB, yielding a 106x increase in memory usage. Consequently, it bcrypt calls a different
|
||||
* _encryptBlock() then the regular Blowfish does. That said, the Blowfish _encryptBlock() is
|
||||
* basically just a thin wrapper around the bcrypt _encryptBlock(), so there's that.
|
||||
*
|
||||
* This explains 3 of the 4 _encryptBlock() implementations. the last _encryptBlock()
|
||||
* implementation can best be understood by doing Ctrl + F and searching for where
|
||||
* self::$use_reg_intval is defined.
|
||||
*
|
||||
* # phpseclib's three different _setupKey() implementations
|
||||
*
|
||||
* Every bcrypt round is the equivalent of encrypting 512KB of data. Since OpenSSH uses 16
|
||||
* rounds by default that's ~8MB of data that's essentially being encrypted whenever
|
||||
* you use bcrypt. That's a lot of data, however, bcrypt operates within tighter constraints
|
||||
* than regular Blowfish, so we can use that to our advantage. In particular, whereas Blowfish
|
||||
* supports variable length keys, in bcrypt, the initial "key" is the sha512 hash of the
|
||||
* password. sha512 hashes are 512 bits or 64 bytes long and thus the bcrypt keys are of a
|
||||
* fixed length whereas Blowfish keys are not of a fixed length.
|
||||
*
|
||||
* bcrypt actually has two different key expansion steps. The first one (expandstate) is
|
||||
* constantly XOR'ing every _encryptBlock() parameter against the salt prior _encryptBlock()'s
|
||||
* being called. The second one (expand0state) is more similar to Blowfish's _setupKey()
|
||||
* but it can still use the fixed length key optimization discussed above and can do away with
|
||||
* the pack() / unpack() calls.
|
||||
*
|
||||
* I suppose _setupKey() could be made to be a thin wrapper around expandstate() but idk it's
|
||||
* just a lot of work for very marginal benefits as _setupKey() is only called once for
|
||||
* regular Blowfish vs the 128 times it's called --per round-- with bcrypt.
|
||||
*
|
||||
* # blowfish + bcrypt in the same class
|
||||
*
|
||||
* Altho there's a lot of Blowfish code that bcrypt doesn't re-use, bcrypt does re-use the
|
||||
* initial S-boxes, the initial P-array and the int-only _encryptBlock() implementation.
|
||||
*
|
||||
* # Credit
|
||||
*
|
||||
* phpseclib's bcrypt implementation is based losely off of OpenSSH's implementation:
|
||||
*
|
||||
* https://github.com/openssh/openssh-portable/blob/master/openbsd-compat/bcrypt_pbkdf.c
|
||||
*
|
||||
* Here's a short example of how to use this library:
|
||||
* <code>
|
||||
* <?php
|
||||
* include 'vendor/autoload.php';
|
||||
*
|
||||
* $blowfish = new \phpseclib3\Crypt\Blowfish('ctr');
|
||||
*
|
||||
* $blowfish->setKey('12345678901234567890123456789012');
|
||||
*
|
||||
* $plaintext = str_repeat('a', 1024);
|
||||
*
|
||||
* echo $blowfish->decrypt($blowfish->encrypt($plaintext));
|
||||
* ?>
|
||||
* </code>
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @author Hans-Juergen Petrich <petrich@tronic-media.com>
|
||||
* @copyright 2007 Jim Wigginton
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
namespace phpseclib3\Crypt;
|
||||
|
||||
use phpseclib3\Crypt\Common\BlockCipher;
|
||||
|
||||
/**
|
||||
* Pure-PHP implementation of Blowfish.
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @author Hans-Juergen Petrich <petrich@tronic-media.com>
|
||||
*/
|
||||
class Blowfish extends BlockCipher
|
||||
{
|
||||
/**
|
||||
* Block Length of the cipher
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::block_size
|
||||
* @var int
|
||||
*/
|
||||
protected $block_size = 8;
|
||||
|
||||
/**
|
||||
* The mcrypt specific name of the cipher
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::cipher_name_mcrypt
|
||||
* @var string
|
||||
*/
|
||||
protected $cipher_name_mcrypt = 'blowfish';
|
||||
|
||||
/**
|
||||
* Optimizing value while CFB-encrypting
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::cfb_init_len
|
||||
* @var int
|
||||
*/
|
||||
protected $cfb_init_len = 500;
|
||||
|
||||
/**
|
||||
* The fixed subkeys boxes ($sbox0 - $sbox3) with 256 entries each
|
||||
*
|
||||
* S-Box 0
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $sbox0 = [
|
||||
0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
|
||||
0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
|
||||
0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
|
||||
0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
|
||||
0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
|
||||
0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
|
||||
0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
|
||||
0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
|
||||
0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
|
||||
0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
|
||||
0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
|
||||
0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
|
||||
0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
|
||||
0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
|
||||
0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
|
||||
0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
|
||||
0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
|
||||
0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
|
||||
0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
|
||||
0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
|
||||
0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
|
||||
0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
|
||||
0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
|
||||
0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
|
||||
0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
|
||||
0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
|
||||
0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
|
||||
0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
|
||||
0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
|
||||
0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
|
||||
0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
|
||||
0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
|
||||
];
|
||||
|
||||
/**
|
||||
* S-Box 1
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $sbox1 = [
|
||||
0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
|
||||
0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
|
||||
0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
|
||||
0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
|
||||
0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
|
||||
0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
|
||||
0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
|
||||
0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
|
||||
0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
|
||||
0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
|
||||
0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
|
||||
0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
|
||||
0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
|
||||
0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
|
||||
0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
|
||||
0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
|
||||
0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
|
||||
0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
|
||||
0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
|
||||
0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
|
||||
0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
|
||||
0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
|
||||
0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
|
||||
0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
|
||||
0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
|
||||
0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
|
||||
0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
|
||||
0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
|
||||
0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
|
||||
0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
|
||||
0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
|
||||
0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
|
||||
];
|
||||
|
||||
/**
|
||||
* S-Box 2
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $sbox2 = [
|
||||
0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
|
||||
0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
|
||||
0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
|
||||
0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
|
||||
0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
|
||||
0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
|
||||
0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
|
||||
0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
|
||||
0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
|
||||
0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
|
||||
0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
|
||||
0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
|
||||
0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
|
||||
0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
|
||||
0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
|
||||
0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
|
||||
0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
|
||||
0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
|
||||
0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
|
||||
0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
|
||||
0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
|
||||
0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
|
||||
0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
|
||||
0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
|
||||
0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
|
||||
0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
|
||||
0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
|
||||
0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
|
||||
0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
|
||||
0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
|
||||
0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
|
||||
0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
|
||||
];
|
||||
|
||||
/**
|
||||
* S-Box 3
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $sbox3 = [
|
||||
0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
|
||||
0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
|
||||
0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
|
||||
0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
|
||||
0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
|
||||
0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
|
||||
0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
|
||||
0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
|
||||
0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
|
||||
0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
|
||||
0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
|
||||
0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
|
||||
0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
|
||||
0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
|
||||
0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
|
||||
0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
|
||||
0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
|
||||
0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
|
||||
0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
|
||||
0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
|
||||
0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
|
||||
0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
|
||||
0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
|
||||
0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
|
||||
0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
|
||||
0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
|
||||
0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
|
||||
0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
|
||||
0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
|
||||
0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
|
||||
0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
|
||||
0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
|
||||
];
|
||||
|
||||
/**
|
||||
* P-Array consists of 18 32-bit subkeys
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private static $parray = [
|
||||
0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,
|
||||
0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
|
||||
0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b
|
||||
];
|
||||
|
||||
/**
|
||||
* The BCTX-working Array
|
||||
*
|
||||
* Holds the expanded key [p] and the key-depended s-boxes [sb]
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $bctx;
|
||||
|
||||
/**
|
||||
* Holds the last used key
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $kl;
|
||||
|
||||
/**
|
||||
* The Key Length (in bytes)
|
||||
* {@internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $Nk
|
||||
* because the encryption / decryption / key schedule creation requires this number and not $key_length. We could
|
||||
* derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
|
||||
* of that, we'll just precompute it once.}
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::setKeyLength()
|
||||
* @var int
|
||||
*/
|
||||
protected $key_length = 16;
|
||||
|
||||
/**
|
||||
* Default Constructor.
|
||||
*
|
||||
* @param string $mode
|
||||
* @throws \InvalidArgumentException if an invalid / unsupported mode is provided
|
||||
*/
|
||||
public function __construct($mode)
|
||||
{
|
||||
parent::__construct($mode);
|
||||
|
||||
if ($this->mode == self::MODE_STREAM) {
|
||||
throw new \InvalidArgumentException('Block ciphers cannot be ran in stream mode');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the key length.
|
||||
*
|
||||
* Key lengths can be between 32 and 448 bits.
|
||||
*
|
||||
* @param int $length
|
||||
*/
|
||||
public function setKeyLength($length)
|
||||
{
|
||||
if ($length < 32 || $length > 448) {
|
||||
throw new \LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys of sizes between 32 and 448 bits are supported');
|
||||
}
|
||||
|
||||
$this->key_length = $length >> 3;
|
||||
|
||||
parent::setKeyLength($length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for engine validity
|
||||
*
|
||||
* This is mainly just a wrapper to set things up for \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
|
||||
* @param int $engine
|
||||
* @return bool
|
||||
*/
|
||||
protected function isValidEngineHelper($engine)
|
||||
{
|
||||
if ($engine == self::ENGINE_OPENSSL) {
|
||||
if ($this->key_length < 16) {
|
||||
return false;
|
||||
}
|
||||
// quoting https://www.openssl.org/news/openssl-3.0-notes.html, OpenSSL 3.0.1
|
||||
// "Moved all variations of the EVP ciphers CAST5, BF, IDEA, SEED, RC2, RC4, RC5, and DES to the legacy provider"
|
||||
// in theory openssl_get_cipher_methods() should catch this but, on GitHub Actions, at least, it does not
|
||||
if (defined('OPENSSL_VERSION_TEXT') && version_compare(preg_replace('#OpenSSL (\d+\.\d+\.\d+) .*#', '$1', OPENSSL_VERSION_TEXT), '3.0.1', '>=')) {
|
||||
return false;
|
||||
}
|
||||
$this->cipher_name_openssl_ecb = 'bf-ecb';
|
||||
$this->cipher_name_openssl = 'bf-' . $this->openssl_translate_mode();
|
||||
}
|
||||
|
||||
return parent::isValidEngineHelper($engine);
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the key (expansion)
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::_setupKey()
|
||||
*/
|
||||
protected function setupKey()
|
||||
{
|
||||
if (isset($this->kl['key']) && $this->key === $this->kl['key']) {
|
||||
// already expanded
|
||||
return;
|
||||
}
|
||||
$this->kl = ['key' => $this->key];
|
||||
|
||||
/* key-expanding p[] and S-Box building sb[] */
|
||||
$this->bctx = [
|
||||
'p' => [],
|
||||
'sb' => [
|
||||
self::$sbox0,
|
||||
self::$sbox1,
|
||||
self::$sbox2,
|
||||
self::$sbox3
|
||||
]
|
||||
];
|
||||
|
||||
// unpack binary string in unsigned chars
|
||||
$key = array_values(unpack('C*', $this->key));
|
||||
$keyl = count($key);
|
||||
// with bcrypt $keyl will always be 16 (because the key is the sha512 of the key you provide)
|
||||
for ($j = 0, $i = 0; $i < 18; ++$i) {
|
||||
// xor P1 with the first 32-bits of the key, xor P2 with the second 32-bits ...
|
||||
for ($data = 0, $k = 0; $k < 4; ++$k) {
|
||||
$data = ($data << 8) | $key[$j];
|
||||
if (++$j >= $keyl) {
|
||||
$j = 0;
|
||||
}
|
||||
}
|
||||
$this->bctx['p'][] = self::$parray[$i] ^ intval($data);
|
||||
}
|
||||
|
||||
// encrypt the zero-string, replace P1 and P2 with the encrypted data,
|
||||
// encrypt P3 and P4 with the new P1 and P2, do it with all P-array and subkeys
|
||||
$data = "\0\0\0\0\0\0\0\0";
|
||||
for ($i = 0; $i < 18; $i += 2) {
|
||||
list($l, $r) = array_values(unpack('N*', $data = $this->encryptBlock($data)));
|
||||
$this->bctx['p'][$i ] = $l;
|
||||
$this->bctx['p'][$i + 1] = $r;
|
||||
}
|
||||
for ($i = 0; $i < 4; ++$i) {
|
||||
for ($j = 0; $j < 256; $j += 2) {
|
||||
list($l, $r) = array_values(unpack('N*', $data = $this->encryptBlock($data)));
|
||||
$this->bctx['sb'][$i][$j ] = $l;
|
||||
$this->bctx['sb'][$i][$j + 1] = $r;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize Static Variables
|
||||
*/
|
||||
protected static function initialize_static_variables()
|
||||
{
|
||||
if (is_float(self::$sbox2[0])) {
|
||||
self::$sbox0 = array_map('intval', self::$sbox0);
|
||||
self::$sbox1 = array_map('intval', self::$sbox1);
|
||||
self::$sbox2 = array_map('intval', self::$sbox2);
|
||||
self::$sbox3 = array_map('intval', self::$sbox3);
|
||||
self::$parray = array_map('intval', self::$parray);
|
||||
}
|
||||
|
||||
parent::initialize_static_variables();
|
||||
}
|
||||
|
||||
/**
|
||||
* bcrypt
|
||||
*
|
||||
* @param string $sha2pass
|
||||
* @param string $sha2salt
|
||||
* @access private
|
||||
* @return string
|
||||
*/
|
||||
private static function bcrypt_hash($sha2pass, $sha2salt)
|
||||
{
|
||||
$p = self::$parray;
|
||||
$sbox0 = self::$sbox0;
|
||||
$sbox1 = self::$sbox1;
|
||||
$sbox2 = self::$sbox2;
|
||||
$sbox3 = self::$sbox3;
|
||||
|
||||
$cdata = array_values(unpack('N*', 'OxychromaticBlowfishSwatDynamite'));
|
||||
$sha2pass = array_values(unpack('N*', $sha2pass));
|
||||
$sha2salt = array_values(unpack('N*', $sha2salt));
|
||||
|
||||
self::expandstate($sha2salt, $sha2pass, $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
for ($i = 0; $i < 64; $i++) {
|
||||
self::expand0state($sha2salt, $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
self::expand0state($sha2pass, $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
|
||||
for ($i = 0; $i < 64; $i++) {
|
||||
for ($j = 0; $j < 8; $j += 2) { // count($cdata) == 8
|
||||
list($cdata[$j], $cdata[$j + 1]) = self::encryptBlockHelperFast($cdata[$j], $cdata[$j + 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
}
|
||||
|
||||
return pack('L*', ...$cdata);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs OpenSSH-style bcrypt
|
||||
*
|
||||
* @param string $pass
|
||||
* @param string $salt
|
||||
* @param int $keylen
|
||||
* @param int $rounds
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public static function bcrypt_pbkdf($pass, $salt, $keylen, $rounds)
|
||||
{
|
||||
self::initialize_static_variables();
|
||||
|
||||
if (PHP_INT_SIZE == 4) {
|
||||
throw new \RuntimeException('bcrypt is far too slow to be practical on 32-bit versions of PHP');
|
||||
}
|
||||
|
||||
$sha2pass = hash('sha512', $pass, true);
|
||||
$results = [];
|
||||
$count = 1;
|
||||
while (32 * count($results) < $keylen) {
|
||||
$countsalt = $salt . pack('N', $count++);
|
||||
$sha2salt = hash('sha512', $countsalt, true);
|
||||
$out = $tmpout = self::bcrypt_hash($sha2pass, $sha2salt);
|
||||
for ($i = 1; $i < $rounds; $i++) {
|
||||
$sha2salt = hash('sha512', $tmpout, true);
|
||||
$tmpout = self::bcrypt_hash($sha2pass, $sha2salt);
|
||||
$out ^= $tmpout;
|
||||
}
|
||||
$results[] = $out;
|
||||
}
|
||||
$output = '';
|
||||
for ($i = 0; $i < 32; $i++) {
|
||||
foreach ($results as $result) {
|
||||
$output .= $result[$i];
|
||||
}
|
||||
}
|
||||
return substr($output, 0, $keylen);
|
||||
}
|
||||
|
||||
/**
|
||||
* Key expansion without salt
|
||||
*
|
||||
* @access private
|
||||
* @param int[] $key
|
||||
* @param int[] $sbox0
|
||||
* @param int[] $sbox1
|
||||
* @param int[] $sbox2
|
||||
* @param int[] $sbox3
|
||||
* @param int[] $p
|
||||
* @see self::_bcrypt_hash()
|
||||
*/
|
||||
private static function expand0state(array $key, array &$sbox0, array &$sbox1, array &$sbox2, array &$sbox3, array &$p)
|
||||
{
|
||||
// expand0state is basically the same thing as this:
|
||||
//return self::expandstate(array_fill(0, 16, 0), $key);
|
||||
// but this separate function eliminates a bunch of XORs and array lookups
|
||||
|
||||
$p = [
|
||||
$p[0] ^ $key[0],
|
||||
$p[1] ^ $key[1],
|
||||
$p[2] ^ $key[2],
|
||||
$p[3] ^ $key[3],
|
||||
$p[4] ^ $key[4],
|
||||
$p[5] ^ $key[5],
|
||||
$p[6] ^ $key[6],
|
||||
$p[7] ^ $key[7],
|
||||
$p[8] ^ $key[8],
|
||||
$p[9] ^ $key[9],
|
||||
$p[10] ^ $key[10],
|
||||
$p[11] ^ $key[11],
|
||||
$p[12] ^ $key[12],
|
||||
$p[13] ^ $key[13],
|
||||
$p[14] ^ $key[14],
|
||||
$p[15] ^ $key[15],
|
||||
$p[16] ^ $key[0],
|
||||
$p[17] ^ $key[1]
|
||||
];
|
||||
|
||||
// @codingStandardsIgnoreStart
|
||||
list( $p[0], $p[1]) = self::encryptBlockHelperFast( 0, 0, $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list( $p[2], $p[3]) = self::encryptBlockHelperFast($p[ 0], $p[ 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list( $p[4], $p[5]) = self::encryptBlockHelperFast($p[ 2], $p[ 3], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list( $p[6], $p[7]) = self::encryptBlockHelperFast($p[ 4], $p[ 5], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list( $p[8], $p[9]) = self::encryptBlockHelperFast($p[ 6], $p[ 7], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list($p[10], $p[11]) = self::encryptBlockHelperFast($p[ 8], $p[ 9], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list($p[12], $p[13]) = self::encryptBlockHelperFast($p[10], $p[11], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list($p[14], $p[15]) = self::encryptBlockHelperFast($p[12], $p[13], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list($p[16], $p[17]) = self::encryptBlockHelperFast($p[14], $p[15], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
// @codingStandardsIgnoreEnd
|
||||
|
||||
list($sbox0[0], $sbox0[1]) = self::encryptBlockHelperFast($p[16], $p[17], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
for ($i = 2; $i < 256; $i += 2) {
|
||||
list($sbox0[$i], $sbox0[$i + 1]) = self::encryptBlockHelperFast($sbox0[$i - 2], $sbox0[$i - 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
|
||||
list($sbox1[0], $sbox1[1]) = self::encryptBlockHelperFast($sbox0[254], $sbox0[255], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
for ($i = 2; $i < 256; $i += 2) {
|
||||
list($sbox1[$i], $sbox1[$i + 1]) = self::encryptBlockHelperFast($sbox1[$i - 2], $sbox1[$i - 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
|
||||
list($sbox2[0], $sbox2[1]) = self::encryptBlockHelperFast($sbox1[254], $sbox1[255], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
for ($i = 2; $i < 256; $i += 2) {
|
||||
list($sbox2[$i], $sbox2[$i + 1]) = self::encryptBlockHelperFast($sbox2[$i - 2], $sbox2[$i - 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
|
||||
list($sbox3[0], $sbox3[1]) = self::encryptBlockHelperFast($sbox2[254], $sbox2[255], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
for ($i = 2; $i < 256; $i += 2) {
|
||||
list($sbox3[$i], $sbox3[$i + 1]) = self::encryptBlockHelperFast($sbox3[$i - 2], $sbox3[$i - 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Key expansion with salt
|
||||
*
|
||||
* @access private
|
||||
* @param int[] $data
|
||||
* @param int[] $key
|
||||
* @param int[] $sbox0
|
||||
* @param int[] $sbox1
|
||||
* @param int[] $sbox2
|
||||
* @param int[] $sbox3
|
||||
* @param int[] $p
|
||||
* @see self::_bcrypt_hash()
|
||||
*/
|
||||
private static function expandstate(array $data, array $key, array &$sbox0, array &$sbox1, array &$sbox2, array &$sbox3, array &$p)
|
||||
{
|
||||
$p = [
|
||||
$p[0] ^ $key[0],
|
||||
$p[1] ^ $key[1],
|
||||
$p[2] ^ $key[2],
|
||||
$p[3] ^ $key[3],
|
||||
$p[4] ^ $key[4],
|
||||
$p[5] ^ $key[5],
|
||||
$p[6] ^ $key[6],
|
||||
$p[7] ^ $key[7],
|
||||
$p[8] ^ $key[8],
|
||||
$p[9] ^ $key[9],
|
||||
$p[10] ^ $key[10],
|
||||
$p[11] ^ $key[11],
|
||||
$p[12] ^ $key[12],
|
||||
$p[13] ^ $key[13],
|
||||
$p[14] ^ $key[14],
|
||||
$p[15] ^ $key[15],
|
||||
$p[16] ^ $key[0],
|
||||
$p[17] ^ $key[1]
|
||||
];
|
||||
|
||||
// @codingStandardsIgnoreStart
|
||||
list( $p[0], $p[1]) = self::encryptBlockHelperFast($data[ 0] , $data[ 1] , $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list( $p[2], $p[3]) = self::encryptBlockHelperFast($data[ 2] ^ $p[ 0], $data[ 3] ^ $p[ 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list( $p[4], $p[5]) = self::encryptBlockHelperFast($data[ 4] ^ $p[ 2], $data[ 5] ^ $p[ 3], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list( $p[6], $p[7]) = self::encryptBlockHelperFast($data[ 6] ^ $p[ 4], $data[ 7] ^ $p[ 5], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list( $p[8], $p[9]) = self::encryptBlockHelperFast($data[ 8] ^ $p[ 6], $data[ 9] ^ $p[ 7], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list($p[10], $p[11]) = self::encryptBlockHelperFast($data[10] ^ $p[ 8], $data[11] ^ $p[ 9], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list($p[12], $p[13]) = self::encryptBlockHelperFast($data[12] ^ $p[10], $data[13] ^ $p[11], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list($p[14], $p[15]) = self::encryptBlockHelperFast($data[14] ^ $p[12], $data[15] ^ $p[13], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
list($p[16], $p[17]) = self::encryptBlockHelperFast($data[ 0] ^ $p[14], $data[ 1] ^ $p[15], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
// @codingStandardsIgnoreEnd
|
||||
|
||||
list($sbox0[0], $sbox0[1]) = self::encryptBlockHelperFast($data[2] ^ $p[16], $data[3] ^ $p[17], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
for ($i = 2, $j = 4; $i < 256; $i += 2, $j = ($j + 2) % 16) { // instead of 16 maybe count($data) would be better?
|
||||
list($sbox0[$i], $sbox0[$i + 1]) = self::encryptBlockHelperFast($data[$j] ^ $sbox0[$i - 2], $data[$j + 1] ^ $sbox0[$i - 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
|
||||
list($sbox1[0], $sbox1[1]) = self::encryptBlockHelperFast($data[2] ^ $sbox0[254], $data[3] ^ $sbox0[255], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
for ($i = 2, $j = 4; $i < 256; $i += 2, $j = ($j + 2) % 16) {
|
||||
list($sbox1[$i], $sbox1[$i + 1]) = self::encryptBlockHelperFast($data[$j] ^ $sbox1[$i - 2], $data[$j + 1] ^ $sbox1[$i - 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
|
||||
list($sbox2[0], $sbox2[1]) = self::encryptBlockHelperFast($data[2] ^ $sbox1[254], $data[3] ^ $sbox1[255], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
for ($i = 2, $j = 4; $i < 256; $i += 2, $j = ($j + 2) % 16) {
|
||||
list($sbox2[$i], $sbox2[$i + 1]) = self::encryptBlockHelperFast($data[$j] ^ $sbox2[$i - 2], $data[$j + 1] ^ $sbox2[$i - 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
|
||||
list($sbox3[0], $sbox3[1]) = self::encryptBlockHelperFast($data[2] ^ $sbox2[254], $data[3] ^ $sbox2[255], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
for ($i = 2, $j = 4; $i < 256; $i += 2, $j = ($j + 2) % 16) {
|
||||
list($sbox3[$i], $sbox3[$i + 1]) = self::encryptBlockHelperFast($data[$j] ^ $sbox3[$i - 2], $data[$j + 1] ^ $sbox3[$i - 1], $sbox0, $sbox1, $sbox2, $sbox3, $p);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypts a block
|
||||
*
|
||||
* @param string $in
|
||||
* @return string
|
||||
*/
|
||||
protected function encryptBlock($in)
|
||||
{
|
||||
$p = $this->bctx['p'];
|
||||
// extract($this->bctx['sb'], EXTR_PREFIX_ALL, 'sb'); // slower
|
||||
$sb_0 = $this->bctx['sb'][0];
|
||||
$sb_1 = $this->bctx['sb'][1];
|
||||
$sb_2 = $this->bctx['sb'][2];
|
||||
$sb_3 = $this->bctx['sb'][3];
|
||||
|
||||
$in = unpack('N*', $in);
|
||||
$l = $in[1];
|
||||
$r = $in[2];
|
||||
|
||||
list($r, $l) = PHP_INT_SIZE == 4 ?
|
||||
self::encryptBlockHelperSlow($l, $r, $sb_0, $sb_1, $sb_2, $sb_3, $p) :
|
||||
self::encryptBlockHelperFast($l, $r, $sb_0, $sb_1, $sb_2, $sb_3, $p);
|
||||
|
||||
return pack("N*", $r, $l);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fast helper function for block encryption
|
||||
*
|
||||
* @access private
|
||||
* @param int $x0
|
||||
* @param int $x1
|
||||
* @param int[] $sbox0
|
||||
* @param int[] $sbox1
|
||||
* @param int[] $sbox2
|
||||
* @param int[] $sbox3
|
||||
* @param int[] $p
|
||||
* @return int[]
|
||||
*/
|
||||
private static function encryptBlockHelperFast($x0, $x1, array $sbox0, array $sbox1, array $sbox2, array $sbox3, array $p)
|
||||
{
|
||||
$x0 ^= $p[0];
|
||||
$x1 ^= ((($sbox0[($x0 & 0xFF000000) >> 24] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[1];
|
||||
$x0 ^= ((($sbox0[($x1 & 0xFF000000) >> 24] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[2];
|
||||
$x1 ^= ((($sbox0[($x0 & 0xFF000000) >> 24] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[3];
|
||||
$x0 ^= ((($sbox0[($x1 & 0xFF000000) >> 24] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[4];
|
||||
$x1 ^= ((($sbox0[($x0 & 0xFF000000) >> 24] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[5];
|
||||
$x0 ^= ((($sbox0[($x1 & 0xFF000000) >> 24] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[6];
|
||||
$x1 ^= ((($sbox0[($x0 & 0xFF000000) >> 24] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[7];
|
||||
$x0 ^= ((($sbox0[($x1 & 0xFF000000) >> 24] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[8];
|
||||
$x1 ^= ((($sbox0[($x0 & 0xFF000000) >> 24] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[9];
|
||||
$x0 ^= ((($sbox0[($x1 & 0xFF000000) >> 24] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[10];
|
||||
$x1 ^= ((($sbox0[($x0 & 0xFF000000) >> 24] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[11];
|
||||
$x0 ^= ((($sbox0[($x1 & 0xFF000000) >> 24] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[12];
|
||||
$x1 ^= ((($sbox0[($x0 & 0xFF000000) >> 24] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[13];
|
||||
$x0 ^= ((($sbox0[($x1 & 0xFF000000) >> 24] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[14];
|
||||
$x1 ^= ((($sbox0[($x0 & 0xFF000000) >> 24] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[15];
|
||||
$x0 ^= ((($sbox0[($x1 & 0xFF000000) >> 24] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[16];
|
||||
|
||||
return [$x1 & 0xFFFFFFFF ^ $p[17], $x0 & 0xFFFFFFFF];
|
||||
}
|
||||
|
||||
/**
|
||||
* Slow helper function for block encryption
|
||||
*
|
||||
* @access private
|
||||
* @param int $x0
|
||||
* @param int $x1
|
||||
* @param int[] $sbox0
|
||||
* @param int[] $sbox1
|
||||
* @param int[] $sbox2
|
||||
* @param int[] $sbox3
|
||||
* @param int[] $p
|
||||
* @return int[]
|
||||
*/
|
||||
private static function encryptBlockHelperSlow($x0, $x1, array $sbox0, array $sbox1, array $sbox2, array $sbox3, array $p)
|
||||
{
|
||||
// -16777216 == intval(0xFF000000) on 32-bit PHP installs
|
||||
$x0 ^= $p[0];
|
||||
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[1];
|
||||
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[2];
|
||||
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[3];
|
||||
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[4];
|
||||
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[5];
|
||||
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[6];
|
||||
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[7];
|
||||
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[8];
|
||||
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[9];
|
||||
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[10];
|
||||
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[11];
|
||||
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[12];
|
||||
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[13];
|
||||
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[14];
|
||||
$x1 ^= self::safe_intval((self::safe_intval($sbox0[(($x0 & -16777216) >> 24) & 0xFF] + $sbox1[($x0 & 0xFF0000) >> 16]) ^ $sbox2[($x0 & 0xFF00) >> 8]) + $sbox3[$x0 & 0xFF]) ^ $p[15];
|
||||
$x0 ^= self::safe_intval((self::safe_intval($sbox0[(($x1 & -16777216) >> 24) & 0xFF] + $sbox1[($x1 & 0xFF0000) >> 16]) ^ $sbox2[($x1 & 0xFF00) >> 8]) + $sbox3[$x1 & 0xFF]) ^ $p[16];
|
||||
|
||||
return [$x1 ^ $p[17], $x0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypts a block
|
||||
*
|
||||
* @param string $in
|
||||
* @return string
|
||||
*/
|
||||
protected function decryptBlock($in)
|
||||
{
|
||||
$p = $this->bctx['p'];
|
||||
$sb_0 = $this->bctx['sb'][0];
|
||||
$sb_1 = $this->bctx['sb'][1];
|
||||
$sb_2 = $this->bctx['sb'][2];
|
||||
$sb_3 = $this->bctx['sb'][3];
|
||||
|
||||
$in = unpack('N*', $in);
|
||||
$l = $in[1];
|
||||
$r = $in[2];
|
||||
|
||||
for ($i = 17; $i > 2; $i -= 2) {
|
||||
$l ^= $p[$i];
|
||||
$r ^= self::safe_intval((self::safe_intval($sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]) ^
|
||||
$sb_2[$l >> 8 & 0xff]) +
|
||||
$sb_3[$l & 0xff]);
|
||||
|
||||
$r ^= $p[$i - 1];
|
||||
$l ^= self::safe_intval((self::safe_intval($sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]) ^
|
||||
$sb_2[$r >> 8 & 0xff]) +
|
||||
$sb_3[$r & 0xff]);
|
||||
}
|
||||
return pack('N*', $r ^ $p[0], $l ^ $p[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the performance-optimized function for de/encrypt()
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::_setupInlineCrypt()
|
||||
*/
|
||||
protected function setupInlineCrypt()
|
||||
{
|
||||
$p = $this->bctx['p'];
|
||||
$init_crypt = '
|
||||
static $sb_0, $sb_1, $sb_2, $sb_3;
|
||||
if (!$sb_0) {
|
||||
$sb_0 = $this->bctx["sb"][0];
|
||||
$sb_1 = $this->bctx["sb"][1];
|
||||
$sb_2 = $this->bctx["sb"][2];
|
||||
$sb_3 = $this->bctx["sb"][3];
|
||||
}
|
||||
';
|
||||
|
||||
$safeint = self::safe_intval_inline();
|
||||
|
||||
// Generating encrypt code:
|
||||
$encrypt_block = '
|
||||
$in = unpack("N*", $in);
|
||||
$l = $in[1];
|
||||
$r = $in[2];
|
||||
';
|
||||
for ($i = 0; $i < 16; $i += 2) {
|
||||
$encrypt_block .= '
|
||||
$l^= ' . $p[$i] . ';
|
||||
$r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^
|
||||
$sb_2[$l >> 8 & 0xff]) +
|
||||
$sb_3[$l & 0xff]') . ';
|
||||
|
||||
$r^= ' . $p[$i + 1] . ';
|
||||
$l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . ' ^
|
||||
$sb_2[$r >> 8 & 0xff]) +
|
||||
$sb_3[$r & 0xff]') . ';
|
||||
';
|
||||
}
|
||||
$encrypt_block .= '
|
||||
$in = pack("N*",
|
||||
$r ^ ' . $p[17] . ',
|
||||
$l ^ ' . $p[16] . '
|
||||
);
|
||||
';
|
||||
// Generating decrypt code:
|
||||
$decrypt_block = '
|
||||
$in = unpack("N*", $in);
|
||||
$l = $in[1];
|
||||
$r = $in[2];
|
||||
';
|
||||
|
||||
for ($i = 17; $i > 2; $i -= 2) {
|
||||
$decrypt_block .= '
|
||||
$l^= ' . $p[$i] . ';
|
||||
$r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^
|
||||
$sb_2[$l >> 8 & 0xff]) +
|
||||
$sb_3[$l & 0xff]') . ';
|
||||
|
||||
$r^= ' . $p[$i - 1] . ';
|
||||
$l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . ' ^
|
||||
$sb_2[$r >> 8 & 0xff]) +
|
||||
$sb_3[$r & 0xff]') . ';
|
||||
';
|
||||
}
|
||||
|
||||
$decrypt_block .= '
|
||||
$in = pack("N*",
|
||||
$r ^ ' . $p[0] . ',
|
||||
$l ^ ' . $p[1] . '
|
||||
);
|
||||
';
|
||||
|
||||
$this->inline_crypt = $this->createInlineCryptFunction(
|
||||
[
|
||||
'init_crypt' => $init_crypt,
|
||||
'init_encrypt' => '',
|
||||
'init_decrypt' => '',
|
||||
'encrypt_block' => $encrypt_block,
|
||||
'decrypt_block' => $decrypt_block
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
799
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/ChaCha20.php
vendored
Normal file
799
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/ChaCha20.php
vendored
Normal file
|
|
@ -0,0 +1,799 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Pure-PHP implementation of ChaCha20.
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright 2019 Jim Wigginton
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
namespace phpseclib3\Crypt;
|
||||
|
||||
use phpseclib3\Exception\BadDecryptionException;
|
||||
use phpseclib3\Exception\InsufficientSetupException;
|
||||
|
||||
/**
|
||||
* Pure-PHP implementation of ChaCha20.
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
*/
|
||||
class ChaCha20 extends Salsa20
|
||||
{
|
||||
/**
|
||||
* The OpenSSL specific name of the cipher
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $cipher_name_openssl = 'chacha20';
|
||||
|
||||
/**
|
||||
* Test for engine validity
|
||||
*
|
||||
* This is mainly just a wrapper to set things up for \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
|
||||
* @param int $engine
|
||||
* @return bool
|
||||
*/
|
||||
protected function isValidEngineHelper($engine)
|
||||
{
|
||||
switch ($engine) {
|
||||
case self::ENGINE_LIBSODIUM:
|
||||
// PHP 7.2.0 (30 Nov 2017) added support for libsodium
|
||||
|
||||
// we could probably make it so that if $this->counter == 0 then the first block would be done with either OpenSSL
|
||||
// or PHP and then subsequent blocks would then be done with libsodium but idk - it's not a high priority atm
|
||||
|
||||
// we could also make it so that if $this->counter == 0 and $this->continuousBuffer then do the first string
|
||||
// with libsodium and subsequent strings with openssl or pure-PHP but again not a high priority
|
||||
return function_exists('sodium_crypto_aead_chacha20poly1305_ietf_encrypt') &&
|
||||
$this->key_length == 32 &&
|
||||
(($this->usePoly1305 && !isset($this->poly1305Key) && $this->counter == 0) || $this->counter == 1) &&
|
||||
!$this->continuousBuffer;
|
||||
case self::ENGINE_OPENSSL:
|
||||
// OpenSSL 1.1.0 (released 25 Aug 2016) added support for chacha20.
|
||||
// PHP didn't support OpenSSL 1.1.0 until 7.0.19 (11 May 2017)
|
||||
|
||||
// if you attempt to provide openssl with a 128 bit key (as opposed to a 256 bit key) openssl will null
|
||||
// pad the key to 256 bits and still use the expansion constant for 256-bit keys. the fact that
|
||||
// openssl treats the IV as both the counter and nonce, however, let's us use openssl in continuous mode
|
||||
// whereas libsodium does not
|
||||
if ($this->key_length != 32) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return parent::isValidEngineHelper($engine);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypts a message.
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
|
||||
* @see self::crypt()
|
||||
* @param string $plaintext
|
||||
* @return string $ciphertext
|
||||
*/
|
||||
public function encrypt($plaintext)
|
||||
{
|
||||
$this->setup();
|
||||
|
||||
if ($this->engine == self::ENGINE_LIBSODIUM) {
|
||||
return $this->encrypt_with_libsodium($plaintext);
|
||||
}
|
||||
|
||||
return parent::encrypt($plaintext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypts a message.
|
||||
*
|
||||
* $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).
|
||||
* At least if the continuous buffer is disabled.
|
||||
*
|
||||
* @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
|
||||
* @see self::crypt()
|
||||
* @param string $ciphertext
|
||||
* @return string $plaintext
|
||||
*/
|
||||
public function decrypt($ciphertext)
|
||||
{
|
||||
$this->setup();
|
||||
|
||||
if ($this->engine == self::ENGINE_LIBSODIUM) {
|
||||
return $this->decrypt_with_libsodium($ciphertext);
|
||||
}
|
||||
|
||||
return parent::decrypt($ciphertext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypts a message with libsodium
|
||||
*
|
||||
* @see self::encrypt()
|
||||
* @param string $plaintext
|
||||
* @return string $text
|
||||
*/
|
||||
private function encrypt_with_libsodium($plaintext)
|
||||
{
|
||||
$params = [$plaintext, $this->aad, $this->nonce, $this->key];
|
||||
$ciphertext = strlen($this->nonce) == 8 ?
|
||||
sodium_crypto_aead_chacha20poly1305_encrypt(...$params) :
|
||||
sodium_crypto_aead_chacha20poly1305_ietf_encrypt(...$params);
|
||||
if (!$this->usePoly1305) {
|
||||
return substr($ciphertext, 0, strlen($plaintext));
|
||||
}
|
||||
|
||||
$newciphertext = substr($ciphertext, 0, strlen($plaintext));
|
||||
|
||||
$this->newtag = $this->usingGeneratedPoly1305Key && strlen($this->nonce) == 12 ?
|
||||
substr($ciphertext, strlen($plaintext)) :
|
||||
$this->poly1305($newciphertext);
|
||||
|
||||
return $newciphertext;
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypts a message with libsodium
|
||||
*
|
||||
* @see self::decrypt()
|
||||
* @param string $ciphertext
|
||||
* @return string $text
|
||||
*/
|
||||
private function decrypt_with_libsodium($ciphertext)
|
||||
{
|
||||
$params = [$ciphertext, $this->aad, $this->nonce, $this->key];
|
||||
|
||||
if (isset($this->poly1305Key)) {
|
||||
if ($this->oldtag === false) {
|
||||
throw new InsufficientSetupException('Authentication Tag has not been set');
|
||||
}
|
||||
if ($this->usingGeneratedPoly1305Key && strlen($this->nonce) == 12) {
|
||||
$plaintext = sodium_crypto_aead_chacha20poly1305_ietf_decrypt(...$params);
|
||||
$this->oldtag = false;
|
||||
if ($plaintext === false) {
|
||||
throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');
|
||||
}
|
||||
return $plaintext;
|
||||
}
|
||||
$newtag = $this->poly1305($ciphertext);
|
||||
if ($this->oldtag != substr($newtag, 0, strlen($this->oldtag))) {
|
||||
$this->oldtag = false;
|
||||
throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');
|
||||
}
|
||||
$this->oldtag = false;
|
||||
}
|
||||
|
||||
$plaintext = strlen($this->nonce) == 8 ?
|
||||
sodium_crypto_aead_chacha20poly1305_encrypt(...$params) :
|
||||
sodium_crypto_aead_chacha20poly1305_ietf_encrypt(...$params);
|
||||
|
||||
return substr($plaintext, 0, strlen($ciphertext));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the nonce.
|
||||
*
|
||||
* @param string $nonce
|
||||
*/
|
||||
public function setNonce($nonce)
|
||||
{
|
||||
if (!is_string($nonce)) {
|
||||
throw new \UnexpectedValueException('The nonce should be a string');
|
||||
}
|
||||
|
||||
/*
|
||||
from https://tools.ietf.org/html/rfc7539#page-7
|
||||
|
||||
"Note also that the original ChaCha had a 64-bit nonce and 64-bit
|
||||
block count. We have modified this here to be more consistent with
|
||||
recommendations in Section 3.2 of [RFC5116]."
|
||||
*/
|
||||
switch (strlen($nonce)) {
|
||||
case 8: // 64 bits
|
||||
case 12: // 96 bits
|
||||
break;
|
||||
default:
|
||||
throw new \LengthException('Nonce of size ' . strlen($nonce) . ' not supported by this algorithm. Only 64-bit nonces or 96-bit nonces are supported');
|
||||
}
|
||||
|
||||
$this->nonce = $nonce;
|
||||
$this->changed = true;
|
||||
$this->setEngine();
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the self::ENGINE_INTERNAL $engine
|
||||
*
|
||||
* (re)init, if necessary, the internal cipher $engine
|
||||
*
|
||||
* _setup() will be called each time if $changed === true
|
||||
* typically this happens when using one or more of following public methods:
|
||||
*
|
||||
* - setKey()
|
||||
*
|
||||
* - setNonce()
|
||||
*
|
||||
* - First run of encrypt() / decrypt() with no init-settings
|
||||
*
|
||||
* @see self::setKey()
|
||||
* @see self::setNonce()
|
||||
* @see self::disableContinuousBuffer()
|
||||
*/
|
||||
protected function setup()
|
||||
{
|
||||
if (!$this->changed) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->enbuffer = $this->debuffer = ['ciphertext' => '', 'counter' => $this->counter];
|
||||
|
||||
$this->changed = $this->nonIVChanged = false;
|
||||
|
||||
if ($this->nonce === false) {
|
||||
throw new InsufficientSetupException('No nonce has been defined');
|
||||
}
|
||||
|
||||
if ($this->key === false) {
|
||||
throw new InsufficientSetupException('No key has been defined');
|
||||
}
|
||||
|
||||
if ($this->usePoly1305 && !isset($this->poly1305Key)) {
|
||||
$this->usingGeneratedPoly1305Key = true;
|
||||
if ($this->engine == self::ENGINE_LIBSODIUM) {
|
||||
return;
|
||||
}
|
||||
$this->createPoly1305Key();
|
||||
}
|
||||
|
||||
$key = $this->key;
|
||||
if (strlen($key) == 16) {
|
||||
$constant = 'expand 16-byte k';
|
||||
$key .= $key;
|
||||
} else {
|
||||
$constant = 'expand 32-byte k';
|
||||
}
|
||||
|
||||
$this->p1 = $constant . $key;
|
||||
$this->p2 = $this->nonce;
|
||||
if (strlen($this->nonce) == 8) {
|
||||
$this->p2 = "\0\0\0\0" . $this->p2;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The quarterround function
|
||||
*
|
||||
* @param int $a
|
||||
* @param int $b
|
||||
* @param int $c
|
||||
* @param int $d
|
||||
*/
|
||||
protected static function quarterRound(&$a, &$b, &$c, &$d)
|
||||
{
|
||||
// in https://datatracker.ietf.org/doc/html/rfc7539#section-2.1 the addition,
|
||||
// xor'ing and rotation are all on the same line so i'm keeping it on the same
|
||||
// line here as well
|
||||
// @codingStandardsIgnoreStart
|
||||
$a+= $b; $d = self::leftRotate(intval($d) ^ intval($a), 16);
|
||||
$c+= $d; $b = self::leftRotate(intval($b) ^ intval($c), 12);
|
||||
$a+= $b; $d = self::leftRotate(intval($d) ^ intval($a), 8);
|
||||
$c+= $d; $b = self::leftRotate(intval($b) ^ intval($c), 7);
|
||||
// @codingStandardsIgnoreEnd
|
||||
}
|
||||
|
||||
/**
|
||||
* The doubleround function
|
||||
*
|
||||
* @param int $x0 (by reference)
|
||||
* @param int $x1 (by reference)
|
||||
* @param int $x2 (by reference)
|
||||
* @param int $x3 (by reference)
|
||||
* @param int $x4 (by reference)
|
||||
* @param int $x5 (by reference)
|
||||
* @param int $x6 (by reference)
|
||||
* @param int $x7 (by reference)
|
||||
* @param int $x8 (by reference)
|
||||
* @param int $x9 (by reference)
|
||||
* @param int $x10 (by reference)
|
||||
* @param int $x11 (by reference)
|
||||
* @param int $x12 (by reference)
|
||||
* @param int $x13 (by reference)
|
||||
* @param int $x14 (by reference)
|
||||
* @param int $x15 (by reference)
|
||||
*/
|
||||
protected static function doubleRound(&$x0, &$x1, &$x2, &$x3, &$x4, &$x5, &$x6, &$x7, &$x8, &$x9, &$x10, &$x11, &$x12, &$x13, &$x14, &$x15)
|
||||
{
|
||||
// columnRound
|
||||
static::quarterRound($x0, $x4, $x8, $x12);
|
||||
static::quarterRound($x1, $x5, $x9, $x13);
|
||||
static::quarterRound($x2, $x6, $x10, $x14);
|
||||
static::quarterRound($x3, $x7, $x11, $x15);
|
||||
// rowRound
|
||||
static::quarterRound($x0, $x5, $x10, $x15);
|
||||
static::quarterRound($x1, $x6, $x11, $x12);
|
||||
static::quarterRound($x2, $x7, $x8, $x13);
|
||||
static::quarterRound($x3, $x4, $x9, $x14);
|
||||
}
|
||||
|
||||
/**
|
||||
* The Salsa20 hash function function
|
||||
*
|
||||
* On my laptop this loop unrolled / function dereferenced version of parent::salsa20 encrypts 1mb of text in
|
||||
* 0.65s vs the 0.85s that it takes with the parent method.
|
||||
*
|
||||
* If we were free to assume that the host OS would always be 64-bits then the if condition in leftRotate could
|
||||
* be eliminated and we could knock this done to 0.60s.
|
||||
*
|
||||
* For comparison purposes, RC4 takes 0.16s and AES in CTR mode with the Eval engine takes 0.48s.
|
||||
* AES in CTR mode with the PHP engine takes 1.19s. Salsa20 / ChaCha20 do not benefit as much from the Eval
|
||||
* approach due to the fact that there are a lot less variables to de-reference, fewer loops to unroll, etc
|
||||
*
|
||||
* @param string $x
|
||||
*/
|
||||
protected static function salsa20($x)
|
||||
{
|
||||
list(, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15) = unpack('V*', $x);
|
||||
$z0 = $x0;
|
||||
$z1 = $x1;
|
||||
$z2 = $x2;
|
||||
$z3 = $x3;
|
||||
$z4 = $x4;
|
||||
$z5 = $x5;
|
||||
$z6 = $x6;
|
||||
$z7 = $x7;
|
||||
$z8 = $x8;
|
||||
$z9 = $x9;
|
||||
$z10 = $x10;
|
||||
$z11 = $x11;
|
||||
$z12 = $x12;
|
||||
$z13 = $x13;
|
||||
$z14 = $x14;
|
||||
$z15 = $x15;
|
||||
|
||||
// @codingStandardsIgnoreStart
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
|
||||
// columnRound
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
|
||||
$x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
|
||||
$x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);
|
||||
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
|
||||
$x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
|
||||
$x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);
|
||||
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
|
||||
$x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
|
||||
$x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);
|
||||
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
|
||||
$x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
|
||||
$x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);
|
||||
|
||||
// rowRound
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
|
||||
$x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
|
||||
$x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);
|
||||
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
|
||||
$x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
|
||||
$x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);
|
||||
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
|
||||
$x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
|
||||
$x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);
|
||||
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
|
||||
$x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
|
||||
$x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
|
||||
// @codingStandardsIgnoreEnd
|
||||
|
||||
$x0 += $z0;
|
||||
$x1 += $z1;
|
||||
$x2 += $z2;
|
||||
$x3 += $z3;
|
||||
$x4 += $z4;
|
||||
$x5 += $z5;
|
||||
$x6 += $z6;
|
||||
$x7 += $z7;
|
||||
$x8 += $z8;
|
||||
$x9 += $z9;
|
||||
$x10 += $z10;
|
||||
$x11 += $z11;
|
||||
$x12 += $z12;
|
||||
$x13 += $z13;
|
||||
$x14 += $z14;
|
||||
$x15 += $z15;
|
||||
|
||||
return pack('V*', $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15);
|
||||
}
|
||||
}
|
||||
581
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.php
vendored
Normal file
581
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.php
vendored
Normal file
|
|
@ -0,0 +1,581 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Base Class for all asymmetric key ciphers
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright 2016 Jim Wigginton
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
namespace phpseclib3\Crypt\Common;
|
||||
|
||||
use phpseclib3\Crypt\DSA;
|
||||
use phpseclib3\Crypt\Hash;
|
||||
use phpseclib3\Crypt\RSA;
|
||||
use phpseclib3\Exception\NoKeyLoadedException;
|
||||
use phpseclib3\Exception\UnsupportedFormatException;
|
||||
use phpseclib3\Math\BigInteger;
|
||||
|
||||
/**
|
||||
* Base Class for all asymmetric cipher classes
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
*/
|
||||
abstract class AsymmetricKey
|
||||
{
|
||||
/**
|
||||
* Precomputed Zero
|
||||
*
|
||||
* @var \phpseclib3\Math\BigInteger
|
||||
*/
|
||||
protected static $zero;
|
||||
|
||||
/**
|
||||
* Precomputed One
|
||||
*
|
||||
* @var \phpseclib3\Math\BigInteger
|
||||
*/
|
||||
protected static $one;
|
||||
|
||||
/**
|
||||
* Format of the loaded key
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $format;
|
||||
|
||||
/**
|
||||
* Hash function
|
||||
*
|
||||
* @var \phpseclib3\Crypt\Hash
|
||||
*/
|
||||
protected $hash;
|
||||
|
||||
/**
|
||||
* HMAC function
|
||||
*
|
||||
* @var \phpseclib3\Crypt\Hash
|
||||
*/
|
||||
private $hmac;
|
||||
|
||||
/**
|
||||
* Supported plugins (lower case)
|
||||
*
|
||||
* @see self::initialize_static_variables()
|
||||
* @var array
|
||||
*/
|
||||
private static $plugins = [];
|
||||
|
||||
/**
|
||||
* Invisible plugins
|
||||
*
|
||||
* @see self::initialize_static_variables()
|
||||
* @var array
|
||||
*/
|
||||
private static $invisiblePlugins = [];
|
||||
|
||||
/**
|
||||
* Available Engines
|
||||
*
|
||||
* @var boolean[]
|
||||
*/
|
||||
protected static $engines = [];
|
||||
|
||||
/**
|
||||
* Key Comment
|
||||
*
|
||||
* @var null|string
|
||||
*/
|
||||
private $comment;
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @return string
|
||||
*/
|
||||
abstract public function toString($type, array $options = []);
|
||||
|
||||
/**
|
||||
* The constructor
|
||||
*/
|
||||
protected function __construct()
|
||||
{
|
||||
self::initialize_static_variables();
|
||||
|
||||
$this->hash = new Hash('sha256');
|
||||
$this->hmac = new Hash('sha256');
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize static variables
|
||||
*/
|
||||
protected static function initialize_static_variables()
|
||||
{
|
||||
if (!isset(self::$zero)) {
|
||||
self::$zero = new BigInteger(0);
|
||||
self::$one = new BigInteger(1);
|
||||
}
|
||||
|
||||
self::loadPlugins('Keys');
|
||||
if (static::ALGORITHM != 'RSA' && static::ALGORITHM != 'DH') {
|
||||
self::loadPlugins('Signature');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the key
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $password optional
|
||||
* @return AsymmetricKey
|
||||
*/
|
||||
public static function load($key, $password = false)
|
||||
{
|
||||
self::initialize_static_variables();
|
||||
|
||||
$class = new \ReflectionClass(static::class);
|
||||
if ($class->isFinal()) {
|
||||
throw new \RuntimeException('load() should not be called from final classes (' . static::class . ')');
|
||||
}
|
||||
|
||||
$components = false;
|
||||
foreach (self::$plugins[static::ALGORITHM]['Keys'] as $format) {
|
||||
if (isset(self::$invisiblePlugins[static::ALGORITHM]) && in_array($format, self::$invisiblePlugins[static::ALGORITHM])) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
$components = $format::load($key, $password);
|
||||
} catch (\Exception $e) {
|
||||
$components = false;
|
||||
}
|
||||
if ($components !== false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($components === false) {
|
||||
throw new NoKeyLoadedException('Unable to read key');
|
||||
}
|
||||
|
||||
$components['format'] = $format;
|
||||
$components['secret'] = isset($components['secret']) ? $components['secret'] : '';
|
||||
$comment = isset($components['comment']) ? $components['comment'] : null;
|
||||
$new = static::onLoad($components);
|
||||
$new->format = $format;
|
||||
$new->comment = $comment;
|
||||
return $new instanceof PrivateKey ?
|
||||
$new->withPassword($password) :
|
||||
$new;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a private key
|
||||
*
|
||||
* @return PrivateKey
|
||||
* @param string|array $key
|
||||
* @param string $password optional
|
||||
*/
|
||||
public static function loadPrivateKey($key, $password = '')
|
||||
{
|
||||
$key = self::load($key, $password);
|
||||
if (!$key instanceof PrivateKey) {
|
||||
throw new NoKeyLoadedException('The key that was loaded was not a private key');
|
||||
}
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a public key
|
||||
*
|
||||
* @return PublicKey
|
||||
* @param string|array $key
|
||||
*/
|
||||
public static function loadPublicKey($key)
|
||||
{
|
||||
$key = self::load($key);
|
||||
if (!$key instanceof PublicKey) {
|
||||
throw new NoKeyLoadedException('The key that was loaded was not a public key');
|
||||
}
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads parameters
|
||||
*
|
||||
* @return AsymmetricKey
|
||||
* @param string|array $key
|
||||
*/
|
||||
public static function loadParameters($key)
|
||||
{
|
||||
$key = self::load($key);
|
||||
if (!$key instanceof PrivateKey && !$key instanceof PublicKey) {
|
||||
throw new NoKeyLoadedException('The key that was loaded was not a parameter');
|
||||
}
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the key, assuming a specific format
|
||||
*
|
||||
* @param string $type
|
||||
* @param string $key
|
||||
* @param string $password optional
|
||||
* @return static
|
||||
*/
|
||||
public static function loadFormat($type, $key, $password = false)
|
||||
{
|
||||
self::initialize_static_variables();
|
||||
|
||||
$components = false;
|
||||
$format = strtolower($type);
|
||||
if (isset(self::$plugins[static::ALGORITHM]['Keys'][$format])) {
|
||||
$format = self::$plugins[static::ALGORITHM]['Keys'][$format];
|
||||
$components = $format::load($key, $password);
|
||||
}
|
||||
|
||||
if ($components === false) {
|
||||
throw new NoKeyLoadedException('Unable to read key');
|
||||
}
|
||||
|
||||
$components['format'] = $format;
|
||||
$components['secret'] = isset($components['secret']) ? $components['secret'] : '';
|
||||
|
||||
$new = static::onLoad($components);
|
||||
$new->format = $format;
|
||||
return $new instanceof PrivateKey ?
|
||||
$new->withPassword($password) :
|
||||
$new;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a private key
|
||||
*
|
||||
* @return PrivateKey
|
||||
* @param string $type
|
||||
* @param string $key
|
||||
* @param string $password optional
|
||||
*/
|
||||
public static function loadPrivateKeyFormat($type, $key, $password = false)
|
||||
{
|
||||
$key = self::loadFormat($type, $key, $password);
|
||||
if (!$key instanceof PrivateKey) {
|
||||
throw new NoKeyLoadedException('The key that was loaded was not a private key');
|
||||
}
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a public key
|
||||
*
|
||||
* @return PublicKey
|
||||
* @param string $type
|
||||
* @param string $key
|
||||
*/
|
||||
public static function loadPublicKeyFormat($type, $key)
|
||||
{
|
||||
$key = self::loadFormat($type, $key);
|
||||
if (!$key instanceof PublicKey) {
|
||||
throw new NoKeyLoadedException('The key that was loaded was not a public key');
|
||||
}
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads parameters
|
||||
*
|
||||
* @return AsymmetricKey
|
||||
* @param string $type
|
||||
* @param string|array $key
|
||||
*/
|
||||
public static function loadParametersFormat($type, $key)
|
||||
{
|
||||
$key = self::loadFormat($type, $key);
|
||||
if (!$key instanceof PrivateKey && !$key instanceof PublicKey) {
|
||||
throw new NoKeyLoadedException('The key that was loaded was not a parameter');
|
||||
}
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate Plugin
|
||||
*
|
||||
* @param string $format
|
||||
* @param string $type
|
||||
* @param string $method optional
|
||||
* @return mixed
|
||||
*/
|
||||
protected static function validatePlugin($format, $type, $method = null)
|
||||
{
|
||||
$type = strtolower($type);
|
||||
if (!isset(self::$plugins[static::ALGORITHM][$format][$type])) {
|
||||
throw new UnsupportedFormatException("$type is not a supported format");
|
||||
}
|
||||
$type = self::$plugins[static::ALGORITHM][$format][$type];
|
||||
if (isset($method) && !method_exists($type, $method)) {
|
||||
throw new UnsupportedFormatException("$type does not implement $method");
|
||||
}
|
||||
|
||||
return $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load Plugins
|
||||
*
|
||||
* @param string $format
|
||||
*/
|
||||
private static function loadPlugins($format)
|
||||
{
|
||||
if (!isset(self::$plugins[static::ALGORITHM][$format])) {
|
||||
self::$plugins[static::ALGORITHM][$format] = [];
|
||||
foreach (new \DirectoryIterator(__DIR__ . '/../' . static::ALGORITHM . '/Formats/' . $format . '/') as $file) {
|
||||
if ($file->getExtension() != 'php') {
|
||||
continue;
|
||||
}
|
||||
$name = $file->getBasename('.php');
|
||||
if ($name[0] == '.') {
|
||||
continue;
|
||||
}
|
||||
$type = 'phpseclib3\Crypt\\' . static::ALGORITHM . '\\Formats\\' . $format . '\\' . $name;
|
||||
$reflect = new \ReflectionClass($type);
|
||||
if ($reflect->isTrait()) {
|
||||
continue;
|
||||
}
|
||||
self::$plugins[static::ALGORITHM][$format][strtolower($name)] = $type;
|
||||
if ($reflect->hasConstant('IS_INVISIBLE')) {
|
||||
self::$invisiblePlugins[static::ALGORITHM][] = $type;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of supported formats.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getSupportedKeyFormats()
|
||||
{
|
||||
self::initialize_static_variables();
|
||||
|
||||
return self::$plugins[static::ALGORITHM]['Keys'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a fileformat plugin
|
||||
*
|
||||
* The plugin needs to either already be loaded or be auto-loadable.
|
||||
* Loading a plugin whose shortname overwrite an existing shortname will overwrite the old plugin.
|
||||
*
|
||||
* @see self::load()
|
||||
* @param string $fullname
|
||||
* @return bool
|
||||
*/
|
||||
public static function addFileFormat($fullname)
|
||||
{
|
||||
self::initialize_static_variables();
|
||||
|
||||
if (class_exists($fullname)) {
|
||||
$meta = new \ReflectionClass($fullname);
|
||||
$shortname = $meta->getShortName();
|
||||
self::$plugins[static::ALGORITHM]['Keys'][strtolower($shortname)] = $fullname;
|
||||
if ($meta->hasConstant('IS_INVISIBLE')) {
|
||||
self::$invisiblePlugins[static::ALGORITHM] = strtolower($name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the format of the loaded key.
|
||||
*
|
||||
* If the key that was loaded wasn't in a valid or if the key was auto-generated
|
||||
* with RSA::createKey() then this will throw an exception.
|
||||
*
|
||||
* @see self::load()
|
||||
* @return mixed
|
||||
*/
|
||||
public function getLoadedFormat()
|
||||
{
|
||||
if (empty($this->format)) {
|
||||
throw new NoKeyLoadedException('This key was created with createKey - it was not loaded with load. Therefore there is no "loaded format"');
|
||||
}
|
||||
|
||||
$meta = new \ReflectionClass($this->format);
|
||||
return $meta->getShortName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the key's comment
|
||||
*
|
||||
* Not all key formats support comments. If you want to set a comment use toString()
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getComment()
|
||||
{
|
||||
return $this->comment;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests engine validity
|
||||
*
|
||||
*/
|
||||
public static function useBestEngine()
|
||||
{
|
||||
static::$engines = [
|
||||
'PHP' => true,
|
||||
'OpenSSL' => extension_loaded('openssl'),
|
||||
// this test can be satisfied by either of the following:
|
||||
// http://php.net/manual/en/book.sodium.php
|
||||
// https://github.com/paragonie/sodium_compat
|
||||
'libsodium' => function_exists('sodium_crypto_sign_keypair')
|
||||
];
|
||||
|
||||
return static::$engines;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flag to use internal engine only (useful for unit testing)
|
||||
*
|
||||
*/
|
||||
public static function useInternalEngine()
|
||||
{
|
||||
static::$engines = [
|
||||
'PHP' => true,
|
||||
'OpenSSL' => false,
|
||||
'libsodium' => false
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* __toString() magic method
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return $this->toString('PKCS8');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines which hashing function should be used
|
||||
*
|
||||
* @param string $hash
|
||||
*/
|
||||
public function withHash($hash)
|
||||
{
|
||||
$new = clone $this;
|
||||
|
||||
$new->hash = new Hash($hash);
|
||||
$new->hmac = new Hash($hash);
|
||||
|
||||
return $new;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the hash algorithm currently being used
|
||||
*
|
||||
*/
|
||||
public function getHash()
|
||||
{
|
||||
return clone $this->hash;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the pseudorandom k for signature generation,
|
||||
* using the process specified for deterministic DSA.
|
||||
*
|
||||
* @param string $h1
|
||||
* @return string
|
||||
*/
|
||||
protected function computek($h1)
|
||||
{
|
||||
$v = str_repeat("\1", strlen($h1));
|
||||
|
||||
$k = str_repeat("\0", strlen($h1));
|
||||
|
||||
$x = $this->int2octets($this->x);
|
||||
$h1 = $this->bits2octets($h1);
|
||||
|
||||
$this->hmac->setKey($k);
|
||||
$k = $this->hmac->hash($v . "\0" . $x . $h1);
|
||||
$this->hmac->setKey($k);
|
||||
$v = $this->hmac->hash($v);
|
||||
$k = $this->hmac->hash($v . "\1" . $x . $h1);
|
||||
$this->hmac->setKey($k);
|
||||
$v = $this->hmac->hash($v);
|
||||
|
||||
$qlen = $this->q->getLengthInBytes();
|
||||
|
||||
while (true) {
|
||||
$t = '';
|
||||
while (strlen($t) < $qlen) {
|
||||
$v = $this->hmac->hash($v);
|
||||
$t = $t . $v;
|
||||
}
|
||||
$k = $this->bits2int($t);
|
||||
|
||||
if (!$k->equals(self::$zero) && $k->compare($this->q) < 0) {
|
||||
break;
|
||||
}
|
||||
$k = $this->hmac->hash($v . "\0");
|
||||
$this->hmac->setKey($k);
|
||||
$v = $this->hmac->hash($v);
|
||||
}
|
||||
|
||||
return $k;
|
||||
}
|
||||
|
||||
/**
|
||||
* Integer to Octet String
|
||||
*
|
||||
* @param \phpseclib3\Math\BigInteger $v
|
||||
* @return string
|
||||
*/
|
||||
private function int2octets($v)
|
||||
{
|
||||
$out = $v->toBytes();
|
||||
$rolen = $this->q->getLengthInBytes();
|
||||
if (strlen($out) < $rolen) {
|
||||
return str_pad($out, $rolen, "\0", STR_PAD_LEFT);
|
||||
} elseif (strlen($out) > $rolen) {
|
||||
return substr($out, -$rolen);
|
||||
} else {
|
||||
return $out;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Bit String to Integer
|
||||
*
|
||||
* @param string $in
|
||||
* @return \phpseclib3\Math\BigInteger
|
||||
*/
|
||||
protected function bits2int($in)
|
||||
{
|
||||
$v = new BigInteger($in, 256);
|
||||
$vlen = strlen($in) << 3;
|
||||
$qlen = $this->q->getLength();
|
||||
if ($vlen > $qlen) {
|
||||
return $v->bitwise_rightShift($vlen - $qlen);
|
||||
}
|
||||
return $v;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bit String to Octet String
|
||||
*
|
||||
* @param string $in
|
||||
* @return string
|
||||
*/
|
||||
private function bits2octets($in)
|
||||
{
|
||||
$z1 = $this->bits2int($in);
|
||||
$z2 = $z1->subtract($this->q);
|
||||
return $z2->compare(self::$zero) < 0 ?
|
||||
$this->int2octets($z1) :
|
||||
$this->int2octets($z2);
|
||||
}
|
||||
}
|
||||
24
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/BlockCipher.php
vendored
Normal file
24
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/BlockCipher.php
vendored
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Base Class for all block ciphers
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @author Hans-Juergen Petrich <petrich@tronic-media.com>
|
||||
* @copyright 2007 Jim Wigginton
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
namespace phpseclib3\Crypt\Common;
|
||||
|
||||
/**
|
||||
* Base Class for all block cipher classes
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
*/
|
||||
abstract class BlockCipher extends SymmetricKey
|
||||
{
|
||||
}
|
||||
69
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/JWK.php
vendored
Normal file
69
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/JWK.php
vendored
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* JSON Web Key (RFC7517) Handler
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright 2015 Jim Wigginton
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
namespace phpseclib3\Crypt\Common\Formats\Keys;
|
||||
|
||||
use phpseclib3\Common\Functions\Strings;
|
||||
|
||||
/**
|
||||
* JSON Web Key Formatted Key Handler
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
*/
|
||||
abstract class JWK
|
||||
{
|
||||
/**
|
||||
* Break a public or private key down into its constituent components
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $password
|
||||
* @return array
|
||||
*/
|
||||
public static function load($key, $password = '')
|
||||
{
|
||||
if (!Strings::is_stringable($key)) {
|
||||
throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
|
||||
}
|
||||
|
||||
$key = preg_replace('#\s#', '', $key); // remove whitespace
|
||||
|
||||
if (PHP_VERSION_ID >= 73000) {
|
||||
$key = json_decode($key, null, 512, JSON_THROW_ON_ERROR);
|
||||
} else {
|
||||
$key = json_decode($key);
|
||||
if (!$key) {
|
||||
throw new \RuntimeException('Unable to decode JSON');
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($key->kty)) {
|
||||
return $key;
|
||||
}
|
||||
|
||||
if (count($key->keys) != 1) {
|
||||
throw new \RuntimeException('Although the JWK key format supports multiple keys phpseclib does not');
|
||||
}
|
||||
|
||||
return $key->keys[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrap a key appropriately
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected static function wrapKey(array $key, array $options)
|
||||
{
|
||||
return json_encode(['keys' => [$key + $options]]);
|
||||
}
|
||||
}
|
||||
220
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/OpenSSH.php
vendored
Normal file
220
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/OpenSSH.php
vendored
Normal file
|
|
@ -0,0 +1,220 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* OpenSSH Key Handler
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* Place in $HOME/.ssh/authorized_keys
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright 2015 Jim Wigginton
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
namespace phpseclib3\Crypt\Common\Formats\Keys;
|
||||
|
||||
use phpseclib3\Common\Functions\Strings;
|
||||
use phpseclib3\Crypt\AES;
|
||||
use phpseclib3\Crypt\Random;
|
||||
|
||||
/**
|
||||
* OpenSSH Formatted RSA Key Handler
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
*/
|
||||
abstract class OpenSSH
|
||||
{
|
||||
/**
|
||||
* Default comment
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected static $comment = 'phpseclib-generated-key';
|
||||
|
||||
/**
|
||||
* Binary key flag
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected static $binary = false;
|
||||
|
||||
/**
|
||||
* Sets the default comment
|
||||
*
|
||||
* @param string $comment
|
||||
*/
|
||||
public static function setComment($comment)
|
||||
{
|
||||
self::$comment = str_replace(["\r", "\n"], '', $comment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Break a public or private key down into its constituent components
|
||||
*
|
||||
* $type can be either ssh-dss or ssh-rsa
|
||||
*
|
||||
* @param string $key
|
||||
* @param string $password
|
||||
* @return array
|
||||
*/
|
||||
public static function load($key, $password = '')
|
||||
{
|
||||
if (!Strings::is_stringable($key)) {
|
||||
throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
|
||||
}
|
||||
|
||||
// key format is described here:
|
||||
// https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.key?annotate=HEAD
|
||||
|
||||
if (strpos($key, 'BEGIN OPENSSH PRIVATE KEY') !== false) {
|
||||
$key = preg_replace('#(?:^-.*?-[\r\n]*$)|\s#ms', '', $key);
|
||||
$key = Strings::base64_decode($key);
|
||||
$magic = Strings::shift($key, 15);
|
||||
if ($magic != "openssh-key-v1\0") {
|
||||
throw new \RuntimeException('Expected openssh-key-v1');
|
||||
}
|
||||
list($ciphername, $kdfname, $kdfoptions, $numKeys) = Strings::unpackSSH2('sssN', $key);
|
||||
if ($numKeys != 1) {
|
||||
// if we wanted to support multiple keys we could update PublicKeyLoader to preview what the # of keys
|
||||
// would be; it'd then call Common\Keys\OpenSSH.php::load() and get the paddedKey. it'd then pass
|
||||
// that to the appropriate key loading parser $numKey times or something
|
||||
throw new \RuntimeException('Although the OpenSSH private key format supports multiple keys phpseclib does not');
|
||||
}
|
||||
switch ($ciphername) {
|
||||
case 'none':
|
||||
break;
|
||||
case 'aes256-ctr':
|
||||
if ($kdfname != 'bcrypt') {
|
||||
throw new \RuntimeException('Only the bcrypt kdf is supported (' . $kdfname . ' encountered)');
|
||||
}
|
||||
list($salt, $rounds) = Strings::unpackSSH2('sN', $kdfoptions);
|
||||
$crypto = new AES('ctr');
|
||||
//$crypto->setKeyLength(256);
|
||||
//$crypto->disablePadding();
|
||||
$crypto->setPassword($password, 'bcrypt', $salt, $rounds, 32);
|
||||
break;
|
||||
default:
|
||||
throw new \RuntimeException('The only supported cipherse are: none, aes256-ctr (' . $ciphername . ' is being used)');
|
||||
}
|
||||
|
||||
list($publicKey, $paddedKey) = Strings::unpackSSH2('ss', $key);
|
||||
list($type) = Strings::unpackSSH2('s', $publicKey);
|
||||
if (isset($crypto)) {
|
||||
$paddedKey = $crypto->decrypt($paddedKey);
|
||||
}
|
||||
list($checkint1, $checkint2) = Strings::unpackSSH2('NN', $paddedKey);
|
||||
// any leftover bytes in $paddedKey are for padding? but they should be sequential bytes. eg. 1, 2, 3, etc.
|
||||
if ($checkint1 != $checkint2) {
|
||||
throw new \RuntimeException('The two checkints do not match');
|
||||
}
|
||||
self::checkType($type);
|
||||
|
||||
return compact('type', 'publicKey', 'paddedKey');
|
||||
}
|
||||
|
||||
$parts = explode(' ', $key, 3);
|
||||
|
||||
if (!isset($parts[1])) {
|
||||
$key = base64_decode($parts[0]);
|
||||
$comment = false;
|
||||
} else {
|
||||
$asciiType = $parts[0];
|
||||
self::checkType($parts[0]);
|
||||
$key = base64_decode($parts[1]);
|
||||
$comment = isset($parts[2]) ? $parts[2] : false;
|
||||
}
|
||||
if ($key === false) {
|
||||
throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
|
||||
}
|
||||
|
||||
list($type) = Strings::unpackSSH2('s', $key);
|
||||
self::checkType($type);
|
||||
if (isset($asciiType) && $asciiType != $type) {
|
||||
throw new \RuntimeException('Two different types of keys are claimed: ' . $asciiType . ' and ' . $type);
|
||||
}
|
||||
if (strlen($key) <= 4) {
|
||||
throw new \UnexpectedValueException('Key appears to be malformed');
|
||||
}
|
||||
|
||||
$publicKey = $key;
|
||||
|
||||
return compact('type', 'publicKey', 'comment');
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle between binary and printable keys
|
||||
*
|
||||
* Printable keys are what are generated by default. These are the ones that go in
|
||||
* $HOME/.ssh/authorized_key.
|
||||
*
|
||||
* @param bool $enabled
|
||||
*/
|
||||
public static function setBinaryOutput($enabled)
|
||||
{
|
||||
self::$binary = $enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if the type is valid
|
||||
*
|
||||
* @param string $candidate
|
||||
*/
|
||||
private static function checkType($candidate)
|
||||
{
|
||||
if (!in_array($candidate, static::$types)) {
|
||||
throw new \RuntimeException("The key type ($candidate) is not equal to: " . implode(',', static::$types));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrap a private key appropriately
|
||||
*
|
||||
* @param string $publicKey
|
||||
* @param string $privateKey
|
||||
* @param string $password
|
||||
* @param array $options
|
||||
* @return string
|
||||
*/
|
||||
protected static function wrapPrivateKey($publicKey, $privateKey, $password, $options)
|
||||
{
|
||||
list(, $checkint) = unpack('N', Random::string(4));
|
||||
|
||||
$comment = isset($options['comment']) ? $options['comment'] : self::$comment;
|
||||
$paddedKey = Strings::packSSH2('NN', $checkint, $checkint) .
|
||||
$privateKey .
|
||||
Strings::packSSH2('s', $comment);
|
||||
|
||||
$usesEncryption = !empty($password) && is_string($password);
|
||||
|
||||
/*
|
||||
from http://tools.ietf.org/html/rfc4253#section-6 :
|
||||
|
||||
Note that the length of the concatenation of 'packet_length',
|
||||
'padding_length', 'payload', and 'random padding' MUST be a multiple
|
||||
of the cipher block size or 8, whichever is larger.
|
||||
*/
|
||||
$blockSize = $usesEncryption ? 16 : 8;
|
||||
$paddingLength = (($blockSize - 1) * strlen($paddedKey)) % $blockSize;
|
||||
for ($i = 1; $i <= $paddingLength; $i++) {
|
||||
$paddedKey .= chr($i);
|
||||
}
|
||||
if (!$usesEncryption) {
|
||||
$key = Strings::packSSH2('sssNss', 'none', 'none', '', 1, $publicKey, $paddedKey);
|
||||
} else {
|
||||
$rounds = isset($options['rounds']) ? $options['rounds'] : 16;
|
||||
$salt = Random::string(16);
|
||||
$kdfoptions = Strings::packSSH2('sN', $salt, $rounds);
|
||||
$crypto = new AES('ctr');
|
||||
$crypto->setPassword($password, 'bcrypt', $salt, $rounds, 32);
|
||||
$paddedKey = $crypto->encrypt($paddedKey);
|
||||
$key = Strings::packSSH2('sssNss', 'aes256-ctr', 'bcrypt', $kdfoptions, 1, $publicKey, $paddedKey);
|
||||
}
|
||||
$key = "openssh-key-v1\0$key";
|
||||
|
||||
return "-----BEGIN OPENSSH PRIVATE KEY-----\n" .
|
||||
chunk_split(Strings::base64_encode($key), 70, "\n") .
|
||||
"-----END OPENSSH PRIVATE KEY-----\n";
|
||||
}
|
||||
}
|
||||
72
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS.php
vendored
Normal file
72
securemail/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS.php
vendored
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PKCS Formatted Key Handler
|
||||
*
|
||||
* PHP version 5
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
* @copyright 2015 Jim Wigginton
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @link http://phpseclib.sourceforge.net
|
||||
*/
|
||||
|
||||
namespace phpseclib3\Crypt\Common\Formats\Keys;
|
||||
|
||||
/**
|
||||
* PKCS1 Formatted Key Handler
|
||||
*
|
||||
* @author Jim Wigginton <terrafrost@php.net>
|
||||
*/
|
||||
abstract class PKCS
|
||||
{
|
||||
/**
|
||||
* Auto-detect the format
|
||||
*/
|
||||
const MODE_ANY = 0;
|
||||
/**
|
||||
* Require base64-encoded PEM's be supplied
|
||||
*/
|
||||
const MODE_PEM = 1;
|
||||
/**
|
||||
* Require raw DER's be supplied
|
||||
*/
|
||||
const MODE_DER = 2;
|
||||
/**#@-*/
|
||||
|
||||
/**
|
||||
* Is the key a base-64 encoded PEM, DER or should it be auto-detected?
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected static $format = self::MODE_ANY;
|
||||
|
||||
/**
|
||||
* Require base64-encoded PEM's be supplied
|
||||
*
|
||||
*/
|
||||
public static function requirePEM()
|
||||
{
|
||||
self::$format = self::MODE_PEM;
|
||||
}
|
||||
|
||||
/**
|
||||
* Require raw DER's be supplied
|
||||
*
|
||||
*/
|
||||
public static function requireDER()
|
||||
{
|
||||
self::$format = self::MODE_DER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accept any format and auto detect the format
|
||||
*
|
||||
* This is the default setting
|
||||
*
|
||||
*/
|
||||
public static function requireAny()
|
||||
{
|
||||
self::$format = self::MODE_ANY;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue