diff --git a/electron-builder.json5 b/electron-builder.json5 index eba3e06..dc83f65 100644 --- a/electron-builder.json5 +++ b/electron-builder.json5 @@ -29,13 +29,48 @@ ], "extraResources": [ { - "from": "electron/res/mac/aria2/aria2.conf", - "to": "electron/res/mac/aria2/aria2.conf", + "from": "electron/res/darwin/aria2/aria2.conf", + "to": "electron/res/darwin/aria2/aria2.conf", "filter": ["**/*"] }, { - "from": "electron/res/mac/aria2/${arch}/aria2c", - "to": "electron/res/mac/aria2/aria2c", + "from": "electron/res/darwin/aria2/${arch}/aria2c", + "to": "electron/res/darwin/aria2/aria2c", + "filter": ["**/*"], + } + ] + }, + "linux": { + "icon": "electron/res/icon/icon.png", + "artifactName": "${productName}_${version}.${arch}.${ext}", + "category": "Network", + "target": [ + { + "target": "AppImage", + "arch": [ + "x64", + "arm64", + "armv7l" + ] + }, + { + "target": "deb", + "arch": [ + "x64", + "arm64", + "armv7l" + ] + } + ], + "extraResources": [ + { + "from": "electron/res/linux/aria2/aria2.conf", + "to": "electron/res/linux/aria2/aria2.conf", + "filter": ["**/*"] + }, + { + "from": "electron/res/linux/aria2/${arch}/aria2c", + "to": "electron/res/linux/aria2/aria2c", "filter": ["**/*"], } ] diff --git a/electron/main/cert.ts b/electron/main/cert.ts index b566db4..7ba48df 100755 --- a/electron/main/cert.ts +++ b/electron/main/cert.ts @@ -25,6 +25,18 @@ export async function installCert(checkInstalled = true) { message: `命令已复制到剪贴板,粘贴命令到终端并运行以安装并信任证书`, }); + reject() + }); + } else if (process.platform === 'linux') { + return new Promise((resolve, reject) => { + clipboard.writeText( + "https://github.com/putyy/res-downloader/blob/master/electron/res/keys/public.pem", + ) + dialog.showMessageBoxSync({ + type: "info", + message: `Linux系统请手动安装证书,已复制下载地址`, + }); + reject() }); } else { diff --git a/electron/main/index.ts b/electron/main/index.ts index c462f66..98a0525 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -169,7 +169,7 @@ function createPreviewWindow(parent: BrowserWindow) { }) } -function createArua2Process() { +function createAria2Process() { // 根据操作系统选择 aria2 的路径 try { let aria2Path, aria2Conf @@ -178,8 +178,8 @@ function createArua2Process() { aria2Path = path.join(CONFIG.EXECUTABLE_PATH, "./win/aria2/aria2c.exe") aria2Conf = path.join(CONFIG.EXECUTABLE_PATH, "./win/aria2/aria2.conf") } else { - aria2Path = path.join(CONFIG.EXECUTABLE_PATH, "./mac/aria2" + (CONFIG.IS_DEV ? `/${process.arch}` : '/') + "/aria2c"); - aria2Conf = path.join(CONFIG.EXECUTABLE_PATH, "./mac/aria2/aria2.conf") + aria2Path = path.join(CONFIG.EXECUTABLE_PATH, `./${process.platform}/aria2` + (CONFIG.IS_DEV ? `/${process.arch}` : '/') + "/aria2c"); + aria2Conf = path.join(CONFIG.EXECUTABLE_PATH, `./${process.platform}/aria2/aria2.conf`) } // 启动 aria2 console.log("启动 aria2") @@ -208,6 +208,6 @@ app.whenReady().then(() => { initIPC() createWindow() createPreviewWindow(mainWindow) - createArua2Process() + createAria2Process() setWin(mainWindow, previewWin) }) \ No newline at end of file diff --git a/electron/main/proxyServer.ts b/electron/main/proxyServer.ts index db4a1ff..fc40ffd 100755 --- a/electron/main/proxyServer.ts +++ b/electron/main/proxyServer.ts @@ -1,8 +1,7 @@ import fs from 'fs' import log from 'electron-log' import CONFIG from './const' -import {closeProxy, setProxy} from './setProxy' -import {app} from "electron" +import {setProxy} from './setProxy' import * as urlTool from "url" import {toSize} from "./utils" // @ts-ignore diff --git a/electron/main/setProxy.ts b/electron/main/setProxy.ts index 74c8042..1b36148 100755 --- a/electron/main/setProxy.ts +++ b/electron/main/setProxy.ts @@ -2,6 +2,7 @@ import {exec} from 'child_process' // @ts-ignore import regedit from 'regedit' import CONFIG from './const' +import {dialog} from "electron"; regedit.setExternalVBSLocation(CONFIG.REGEDIT_VBS_PATH) @@ -34,6 +35,12 @@ export async function setProxy(host, port) { }); }), ); + } else if (process.platform === 'linux') { + dialog.showMessageBoxSync({ + type: "info", + message: `请手动设置系统代理`, + }); + return new Promise((resolve, reject) => {}) } else { const valuesToPut = { 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings': { @@ -81,6 +88,11 @@ export async function closeProxy() { }); }), ); + } else if (process.platform === 'linux') { + dialog.showMessageBoxSync({ + type: "info", + message: `请手动取消系统代理`, + }); } else { const valuesToPut = { 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings': { diff --git a/electron/res/mac/aria2/aria2.conf b/electron/res/darwin/aria2/aria2.conf similarity index 100% rename from electron/res/mac/aria2/aria2.conf rename to electron/res/darwin/aria2/aria2.conf diff --git a/electron/res/mac/aria2/arm64/aria2c b/electron/res/darwin/aria2/arm64/aria2c similarity index 100% rename from electron/res/mac/aria2/arm64/aria2c rename to electron/res/darwin/aria2/arm64/aria2c diff --git a/electron/res/mac/aria2/x64/aria2c b/electron/res/darwin/aria2/x64/aria2c similarity index 100% rename from electron/res/mac/aria2/x64/aria2c rename to electron/res/darwin/aria2/x64/aria2c diff --git a/electron/res/linux/aria2/aria2.conf b/electron/res/linux/aria2/aria2.conf new file mode 100644 index 0000000..d57b6d6 --- /dev/null +++ b/electron/res/linux/aria2/aria2.conf @@ -0,0 +1,25 @@ +#允许rpc +enable-rpc=true +#允许非外部访问 +rpc-listen-all=true + +#最大同时下载数(任务数), 路由建议值: 3 +max-concurrent-downloads=3 +#断点续传 +continue=true +#同服务器连接数 +max-connection-per-server=10 +#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要 +min-split-size=10M +#单文件最大线程数, 路由建议值: 5 +split=10 +#下载速度限制 +max-overall-download-limit=0 +#单文件速度限制 +max-download-limit=0 +#上传速度限制 +max-overall-upload-limit=0 +#单文件速度限制 +max-upload-limit=0 + +check-certificate=false \ No newline at end of file diff --git a/electron/res/linux/aria2/arm64/aria2c b/electron/res/linux/aria2/arm64/aria2c new file mode 100755 index 0000000..208091e Binary files /dev/null and b/electron/res/linux/aria2/arm64/aria2c differ diff --git a/electron/res/linux/aria2/armv7l/aria2c b/electron/res/linux/aria2/armv7l/aria2c new file mode 100755 index 0000000..b08e1e1 Binary files /dev/null and b/electron/res/linux/aria2/armv7l/aria2c differ diff --git a/electron/res/linux/aria2/x64/aria2c b/electron/res/linux/aria2/x64/aria2c new file mode 100755 index 0000000..b1ae0b4 Binary files /dev/null and b/electron/res/linux/aria2/x64/aria2c differ diff --git a/electron/res/win/openssl/CA.pl b/electron/res/win/openssl/CA.pl new file mode 100755 index 0000000..3c45f59 --- /dev/null +++ b/electron/res/win/openssl/CA.pl @@ -0,0 +1,239 @@ +#!/usr/bin/env perl +# Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the Apache License 2.0 (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# +# Wrapper around the ca to make it easier to use +# +# WARNING: do not edit! +# Generated by makefile from apps\CA.pl.in + +use strict; +use warnings; + +my $verbose = 1; +my @OPENSSL_CMDS = ("req", "ca", "pkcs12", "x509", "verify"); + +my $openssl = $ENV{'OPENSSL'} // "openssl"; +$ENV{'OPENSSL'} = $openssl; +my $OPENSSL_CONFIG = $ENV{"OPENSSL_CONFIG"} // ""; + +# Command invocations. +my $REQ = "$openssl req $OPENSSL_CONFIG"; +my $CA = "$openssl ca $OPENSSL_CONFIG"; +my $VERIFY = "$openssl verify"; +my $X509 = "$openssl x509"; +my $PKCS12 = "$openssl pkcs12"; + +# Default values for various configuration settings. +my $CATOP = "./demoCA"; +my $CAKEY = "cakey.pem"; +my $CAREQ = "careq.pem"; +my $CACERT = "cacert.pem"; +my $CACRL = "crl.pem"; +my $DAYS = "-days 365"; +my $CADAYS = "-days 1095"; # 3 years +my $EXTENSIONS = "-extensions v3_ca"; +my $POLICY = "-policy policy_anything"; +my $NEWKEY = "newkey.pem"; +my $NEWREQ = "newreq.pem"; +my $NEWCERT = "newcert.pem"; +my $NEWP12 = "newcert.p12"; + +# Commandline parsing +my %EXTRA; +my $WHAT = shift @ARGV || ""; +@ARGV = parse_extra(@ARGV); +my $RET = 0; + +# Split out "-extra-CMD value", and return new |@ARGV|. Fill in +# |EXTRA{CMD}| with list of values. +sub parse_extra +{ + foreach ( @OPENSSL_CMDS ) { + $EXTRA{$_} = ''; + } + + my @result; + while ( scalar(@_) > 0 ) { + my $arg = shift; + if ( $arg !~ m/-extra-([a-z0-9]+)/ ) { + push @result, $arg; + next; + } + $arg =~ s/-extra-//; + die("Unknown \"-${arg}-extra\" option, exiting") + unless scalar grep { $arg eq $_ } @OPENSSL_CMDS; + $EXTRA{$arg} .= " " . shift; + } + return @result; +} + + +# See if reason for a CRL entry is valid; exit if not. +sub crl_reason_ok +{ + my $r = shift; + + if ($r eq 'unspecified' || $r eq 'keyCompromise' + || $r eq 'CACompromise' || $r eq 'affiliationChanged' + || $r eq 'superseded' || $r eq 'cessationOfOperation' + || $r eq 'certificateHold' || $r eq 'removeFromCRL') { + return 1; + } + print STDERR "Invalid CRL reason; must be one of:\n"; + print STDERR " unspecified, keyCompromise, CACompromise,\n"; + print STDERR " affiliationChanged, superseded, cessationOfOperation\n"; + print STDERR " certificateHold, removeFromCRL"; + exit 1; +} + +# Copy a PEM-format file; return like exit status (zero means ok) +sub copy_pemfile +{ + my ($infile, $outfile, $bound) = @_; + my $found = 0; + + open IN, $infile || die "Cannot open $infile, $!"; + open OUT, ">$outfile" || die "Cannot write to $outfile, $!"; + while () { + $found = 1 if /^-----BEGIN.*$bound/; + print OUT $_ if $found; + $found = 2, last if /^-----END.*$bound/; + } + close IN; + close OUT; + return $found == 2 ? 0 : 1; +} + +# Wrapper around system; useful for debugging. Returns just the exit status +sub run +{ + my $cmd = shift; + print "====\n$cmd\n" if $verbose; + my $status = system($cmd); + print "==> $status\n====\n" if $verbose; + return $status >> 8; +} + + +if ( $WHAT =~ /^(-\?|-h|-help)$/ ) { + print STDERR <${CATOP}/index.txt"; + close OUT; + open OUT, ">${CATOP}/crlnumber"; + print OUT "01\n"; + close OUT; + # ask user for existing CA certificate + print "CA certificate filename (or enter to create)\n"; + my $FILE; + $FILE = "" unless defined($FILE = ); + $FILE =~ s{\R$}{}; + if ($FILE ne "") { + copy_pemfile($FILE,"${CATOP}/private/$CAKEY", "PRIVATE"); + copy_pemfile($FILE,"${CATOP}/$CACERT", "CERTIFICATE"); + } else { + print "Making CA certificate ...\n"; + $RET = run("$REQ -new -keyout ${CATOP}/private/$CAKEY" + . " -out ${CATOP}/$CAREQ $EXTRA{req}"); + $RET = run("$CA -create_serial" + . " -out ${CATOP}/$CACERT $CADAYS -batch" + . " -keyfile ${CATOP}/private/$CAKEY -selfsign" + . " $EXTENSIONS" + . " -infiles ${CATOP}/$CAREQ $EXTRA{ca}") if $RET == 0; + print "CA certificate is in ${CATOP}/$CACERT\n" if $RET == 0; + } +} elsif ($WHAT eq '-pkcs12' ) { + my $cname = $ARGV[0]; + $cname = "My Certificate" unless defined $cname; + $RET = run("$PKCS12 -in $NEWCERT -inkey $NEWKEY" + . " -certfile ${CATOP}/$CACERT -out $NEWP12" + . " -export -name \"$cname\" $EXTRA{pkcs12}"); + print "PKCS #12 file is in $NEWP12\n" if $RET == 0; +} elsif ($WHAT eq '-xsign' ) { + $RET = run("$CA $POLICY -infiles $NEWREQ $EXTRA{ca}"); +} elsif ($WHAT eq '-sign' ) { + $RET = run("$CA $POLICY -out $NEWCERT" + . " -infiles $NEWREQ $EXTRA{ca}"); + print "Signed certificate is in $NEWCERT\n" if $RET == 0; +} elsif ($WHAT eq '-signCA' ) { + $RET = run("$CA $POLICY -out $NEWCERT" + . " $EXTENSIONS -infiles $NEWREQ $EXTRA{ca}"); + print "Signed CA certificate is in $NEWCERT\n" if $RET == 0; +} elsif ($WHAT eq '-signcert' ) { + $RET = run("$X509 -x509toreq -in $NEWREQ -signkey $NEWREQ" + . " -out tmp.pem $EXTRA{x509}"); + $RET = run("$CA $POLICY -out $NEWCERT" + . "-infiles tmp.pem $EXTRA{ca}") if $RET == 0; + print "Signed certificate is in $NEWCERT\n" if $RET == 0; +} elsif ($WHAT eq '-verify' ) { + my @files = @ARGV ? @ARGV : ( $NEWCERT ); + foreach my $file (@files) { + # -CAfile quoted for VMS, since the C RTL downcases all unquoted + # arguments to C programs + my $status = run("$VERIFY \"-CAfile\" ${CATOP}/$CACERT $file $EXTRA{verify}"); + $RET = $status if $status != 0; + } +} elsif ($WHAT eq '-crl' ) { + $RET = run("$CA -gencrl -out ${CATOP}/crl/$CACRL $EXTRA{ca}"); + print "Generated CRL is in ${CATOP}/crl/$CACRL\n" if $RET == 0; +} elsif ($WHAT eq '-revoke' ) { + my $cname = $ARGV[0]; + if (!defined $cname) { + print "Certificate filename is required; reason optional.\n"; + exit 1; + } + my $reason = $ARGV[1]; + $reason = " -crl_reason $reason" + if defined $reason && crl_reason_ok($reason); + $RET = run("$CA -revoke \"$cname\"" . $reason . $EXTRA{ca}); +} else { + print STDERR "Unknown arg \"$WHAT\"\n"; + print STDERR "Use -help for help.\n"; + exit 1; +} + +exit $RET; diff --git a/electron/res/win/openssl/HashInfo.txt b/electron/res/win/openssl/HashInfo.txt deleted file mode 100644 index d9b55dd..0000000 Binary files a/electron/res/win/openssl/HashInfo.txt and /dev/null differ diff --git a/electron/res/win/openssl/OpenSSL License.txt b/electron/res/win/openssl/OpenSSL License.txt deleted file mode 100644 index 3090896..0000000 --- a/electron/res/win/openssl/OpenSSL License.txt +++ /dev/null @@ -1,126 +0,0 @@ - - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. Actually both licenses are BSD-style - Open Source licenses. In case of any license issues related to OpenSSL - please contact openssl-core@openssl.org. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ diff --git a/electron/res/win/openssl/ReadMe.txt b/electron/res/win/openssl/ReadMe.txt deleted file mode 100644 index 958c273..0000000 --- a/electron/res/win/openssl/ReadMe.txt +++ /dev/null @@ -1,59 +0,0 @@ -============================================================================= -OpenSSL v1.0.2q Precompiled Binaries for Win32 ------------------------------------------------------------------------------ - - *** Release Information *** - -Release Date: Nov 22, 2018 - -Author: Frederik A. Winkelsdorf (opendec.wordpress.com) - for the Indy Project (www.indyproject.org) - -Requirements: Indy 10.5.5+ (SVN Version or Delphi 2009 and newer) - -Dependencies: The libraries have no noteworthy dependencies - -Installation: Copy both DLL files into your application directory - -Supported OS: Windows 2000 up to Windows 10 - ------------------------------------------------------------------------------ - - *** Legal Disclaimer *** - -THIS SOFTWARE IS PROVIDED BY ITS AUTHOR AND THE INDY PROJECT "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -OpenSSL license terms are provided in the file "OpenSSL License.txt". - -PLEASE CHECK IF YOU NEED TO COMPLY WITH EXPORT RESTRICTIONS FOR CRYPTOGRAPHIC -SOFTWARE AND/OR PATENTS. - ------------------------------------------------------------------------------ - - *** Build Information Win32 *** - -Built with: Microsoft Visual C++ 2008 Express Edition - The Netwide Assembler (NASM) v2.11.08 Win32 - Strawberry Perl v5.22.0.1 Win32 Portable - Windows PowerShell - FinalBuilder 7 - -Commands: perl configure VC-WIN32 - ms\do_nasm - adjusted ms\ntdll.mak (replaced "/MD" with "/MT") - adjusted ms\version32.rc (Indy Information inserted) - nmake -f ms\ntdll.mak - nmake -f ms\ntdll.mak test - editbin.exe /rebase:base=0x11000000 libeay32.dll - editbin.exe /rebase:base=0x12000000 ssleay32.dll - -============================================================================= \ No newline at end of file diff --git a/electron/res/win/openssl/capi.dll b/electron/res/win/openssl/capi.dll new file mode 100755 index 0000000..b90e597 Binary files /dev/null and b/electron/res/win/openssl/capi.dll differ diff --git a/electron/res/win/openssl/dasync.dll b/electron/res/win/openssl/dasync.dll new file mode 100755 index 0000000..921339c Binary files /dev/null and b/electron/res/win/openssl/dasync.dll differ diff --git a/electron/res/win/openssl/legacy.dll b/electron/res/win/openssl/legacy.dll new file mode 100755 index 0000000..66b1c04 Binary files /dev/null and b/electron/res/win/openssl/legacy.dll differ diff --git a/electron/res/win/openssl/libcrypto-3-x64.dll b/electron/res/win/openssl/libcrypto-3-x64.dll new file mode 100755 index 0000000..704a666 Binary files /dev/null and b/electron/res/win/openssl/libcrypto-3-x64.dll differ diff --git a/electron/res/win/openssl/libeay32.dll b/electron/res/win/openssl/libeay32.dll deleted file mode 100644 index 040807c..0000000 Binary files a/electron/res/win/openssl/libeay32.dll and /dev/null differ diff --git a/electron/res/win/openssl/libssl-3-x64.dll b/electron/res/win/openssl/libssl-3-x64.dll new file mode 100755 index 0000000..1760a2b Binary files /dev/null and b/electron/res/win/openssl/libssl-3-x64.dll differ diff --git a/electron/res/win/openssl/loader_attic.dll b/electron/res/win/openssl/loader_attic.dll new file mode 100755 index 0000000..3757d9a Binary files /dev/null and b/electron/res/win/openssl/loader_attic.dll differ diff --git a/electron/res/win/openssl/openssl.cnf b/electron/res/win/openssl/openssl.cnf old mode 100644 new mode 100755 diff --git a/electron/res/win/openssl/openssl.exe b/electron/res/win/openssl/openssl.exe old mode 100644 new mode 100755 index 9648f2e..0faf569 Binary files a/electron/res/win/openssl/openssl.exe and b/electron/res/win/openssl/openssl.exe differ diff --git a/electron/res/win/openssl/ossltest.dll b/electron/res/win/openssl/ossltest.dll new file mode 100755 index 0000000..7d0dc3d Binary files /dev/null and b/electron/res/win/openssl/ossltest.dll differ diff --git a/electron/res/win/openssl/p_minimal.dll b/electron/res/win/openssl/p_minimal.dll new file mode 100755 index 0000000..2ed5460 Binary files /dev/null and b/electron/res/win/openssl/p_minimal.dll differ diff --git a/electron/res/win/openssl/p_test.dll b/electron/res/win/openssl/p_test.dll new file mode 100755 index 0000000..d6ad483 Binary files /dev/null and b/electron/res/win/openssl/p_test.dll differ diff --git a/electron/res/win/openssl/padlock.dll b/electron/res/win/openssl/padlock.dll new file mode 100755 index 0000000..01daf9f Binary files /dev/null and b/electron/res/win/openssl/padlock.dll differ diff --git a/electron/res/win/openssl/progs.pl b/electron/res/win/openssl/progs.pl new file mode 100755 index 0000000..4a1e4be --- /dev/null +++ b/electron/res/win/openssl/progs.pl @@ -0,0 +1,218 @@ +#! /usr/bin/env perl +# Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the Apache License 2.0 (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +# Generate progs.h file by looking for command mains in list of C files +# passed on the command line. + +use strict; +use warnings; +use lib '.'; +use configdata qw/@disablables %unified_info/; + +my $opt = shift @ARGV; +die "Unrecognised option, must be -C or -H\n" + unless ($opt eq '-H' || $opt eq '-C'); + +my %commands = (); +my $cmdre = qr/^\s*int\s+([a-z_][a-z0-9_]*)_main\(\s*int\s+argc\s*,/; +my $apps_openssl = shift @ARGV; +my $YEAR = [gmtime($ENV{SOURCE_DATE_EPOCH} || time())]->[5] + 1900; + +# because the program apps/openssl has object files as sources, and +# they then have the corresponding C files as source, we need to chain +# the lookups in %unified_info +my @openssl_source = + map { @{$unified_info{sources}->{$_}} } + grep { /\.o$/ + && !$unified_info{attributes}->{sources}->{$apps_openssl}->{$_}->{nocheck} } + @{$unified_info{sources}->{$apps_openssl}}; + +foreach my $filename (@openssl_source) { + open F, $filename or die "Couldn't open $filename: $!\n"; + foreach ( grep /$cmdre/, ) { + my @foo = /$cmdre/; + $commands{$1} = 1; + } + close F; +} + +@ARGV = sort keys %commands; + +if ($opt eq '-H') { + print <<"EOF"; +/* + * WARNING: do not edit! + * Generated by apps/progs.pl + * + * Copyright 1995-$YEAR The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "function.h" + +EOF + + foreach (@ARGV) { + printf "extern int %s_main(int argc, char *argv[]);\n", $_; + } + print "\n"; + + foreach (@ARGV) { + printf "extern const OPTIONS %s_options[];\n", $_; + } + print "\n"; + print "extern FUNCTION functions[];\n"; +} + +if ($opt eq '-C') { + print <<"EOF"; +/* + * WARNING: do not edit! + * Generated by apps/progs.pl + * + * Copyright 1995-$YEAR The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "progs.h" + +EOF + + my %cmd_disabler = ( + ciphers => "sock", + genrsa => "rsa", + gendsa => "dsa", + dsaparam => "dsa", + gendh => "dh", + dhparam => "dh", + ecparam => "ec", + ); + my %cmd_deprecated = ( +# The format of this table is: +# [0] = alternative command to use instead +# [1] = deprecented in this version +# [2] = preprocessor conditional for excluding irrespective of deprecation +# rsa => [ "pkey", "3_0", "rsa" ], +# genrsa => [ "genpkey", "3_0", "rsa" ], + rsautl => [ "pkeyutl", "3_0", "rsa" ], +# dhparam => [ "pkeyparam", "3_0", "dh" ], +# dsaparam => [ "pkeyparam", "3_0", "dsa" ], +# dsa => [ "pkey", "3_0", "dsa" ], +# gendsa => [ "genpkey", "3_0", "dsa" ], +# ec => [ "pkey", "3_0", "ec" ], +# ecparam => [ "pkeyparam", "3_0", "ec" ], + ); + + print "FUNCTION functions[] = {\n"; + foreach my $cmd ( @ARGV ) { + my $str = + " {FT_general, \"$cmd\", ${cmd}_main, ${cmd}_options, NULL, NULL},\n"; + if ($cmd =~ /^s_/) { + print "#ifndef OPENSSL_NO_SOCK\n${str}#endif\n"; + } elsif (my $deprecated = $cmd_deprecated{$cmd}) { + my @dep = @{$deprecated}; + my $daltprg = $dep[0]; + my $dver = $dep[1]; + my $dsys = $dep[2]; + print "#if !defined(OPENSSL_NO_DEPRECATED_" . $dver . ")"; + if ($dsys) { + print " && !defined(OPENSSL_NO_" . uc($dsys) . ")"; + } + $dver =~ s/_/./g; + my $dalt = "\"" . $daltprg . "\", \"" . $dver . "\""; + $str =~ s/NULL, NULL/$dalt/; + print "\n${str}#endif\n"; + } elsif (grep { $cmd eq $_ } @disablables) { + print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n"; + } elsif (my $disabler = $cmd_disabler{$cmd}) { + print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n"; + } else { + print $str; + } + } + + my %md_disabler = ( + blake2b512 => "blake2", + blake2s256 => "blake2", + ); + foreach my $cmd ( + "md2", "md4", "md5", + "sha1", "sha224", "sha256", "sha384", + "sha512", "sha512-224", "sha512-256", + "sha3-224", "sha3-256", "sha3-384", "sha3-512", + "shake128", "shake256", + "mdc2", "rmd160", "blake2b512", "blake2s256", + "sm3" + ) { + my $str = " {FT_md, \"$cmd\", dgst_main, NULL, NULL},\n"; + if (grep { $cmd eq $_ } @disablables) { + print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n"; + } elsif (my $disabler = $md_disabler{$cmd}) { + print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n"; + } else { + print $str; + } + } + + my %cipher_disabler = ( + des3 => "des", + desx => "des", + cast5 => "cast", + ); + foreach my $cmd ( + "aes-128-cbc", "aes-128-ecb", + "aes-192-cbc", "aes-192-ecb", + "aes-256-cbc", "aes-256-ecb", + "aria-128-cbc", "aria-128-cfb", + "aria-128-ctr", "aria-128-ecb", "aria-128-ofb", + "aria-128-cfb1", "aria-128-cfb8", + "aria-192-cbc", "aria-192-cfb", + "aria-192-ctr", "aria-192-ecb", "aria-192-ofb", + "aria-192-cfb1", "aria-192-cfb8", + "aria-256-cbc", "aria-256-cfb", + "aria-256-ctr", "aria-256-ecb", "aria-256-ofb", + "aria-256-cfb1", "aria-256-cfb8", + "camellia-128-cbc", "camellia-128-ecb", + "camellia-192-cbc", "camellia-192-ecb", + "camellia-256-cbc", "camellia-256-ecb", + "base64", "zlib", "brotli", "zstd", + "des", "des3", "desx", "idea", "seed", "rc4", "rc4-40", + "rc2", "bf", "cast", "rc5", + "des-ecb", "des-ede", "des-ede3", + "des-cbc", "des-ede-cbc","des-ede3-cbc", + "des-cfb", "des-ede-cfb","des-ede3-cfb", + "des-ofb", "des-ede-ofb","des-ede3-ofb", + "idea-cbc","idea-ecb", "idea-cfb", "idea-ofb", + "seed-cbc","seed-ecb", "seed-cfb", "seed-ofb", + "rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc", + "bf-cbc", "bf-ecb", "bf-cfb", "bf-ofb", + "cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb", + "cast-cbc", "rc5-cbc", "rc5-ecb", "rc5-cfb", "rc5-ofb", + "sm4-cbc", "sm4-ecb", "sm4-cfb", "sm4-ofb", "sm4-ctr" + ) { + my $str = " {FT_cipher, \"$cmd\", enc_main, enc_options, NULL},\n"; + (my $algo = $cmd) =~ s/-.*//g; + if (grep { $algo eq $_ } @disablables) { + print "#ifndef OPENSSL_NO_" . uc($algo) . "\n${str}#endif\n"; + } elsif (my $disabler = $cipher_disabler{$algo}) { + print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n"; + } else { + print $str; + } + } + + print " {0, NULL, NULL, NULL, NULL}\n};\n"; +} diff --git a/electron/res/win/openssl/ssleay32.dll b/electron/res/win/openssl/ssleay32.dll deleted file mode 100644 index c0294de..0000000 Binary files a/electron/res/win/openssl/ssleay32.dll and /dev/null differ diff --git a/electron/res/win/openssl/tsget.pl b/electron/res/win/openssl/tsget.pl new file mode 100755 index 0000000..58bcd94 --- /dev/null +++ b/electron/res/win/openssl/tsget.pl @@ -0,0 +1,200 @@ +#!/usr/bin/env perl +# Copyright 2002-2018 The OpenSSL Project Authors. All Rights Reserved. +# Copyright (c) 2002 The OpenTSA Project. All rights reserved. +# +# Licensed under the Apache License 2.0 (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +use strict; +use IO::Handle; +use Getopt::Std; +use File::Basename; +use WWW::Curl::Easy; + +use vars qw(%options); + +# Callback for reading the body. +sub read_body { + my ($maxlength, $state) = @_; + my $return_data = ""; + my $data_len = length ${$state->{data}}; + if ($state->{bytes} < $data_len) { + $data_len = $data_len - $state->{bytes}; + $data_len = $maxlength if $data_len > $maxlength; + $return_data = substr ${$state->{data}}, $state->{bytes}, $data_len; + $state->{bytes} += $data_len; + } + return $return_data; +} + +# Callback for writing the body into a variable. +sub write_body { + my ($data, $pointer) = @_; + ${$pointer} .= $data; + return length($data); +} + +# Initialise a new Curl object. +sub create_curl { + my $url = shift; + + # Create Curl object. + my $curl = WWW::Curl::Easy::new(); + + # Error-handling related options. + $curl->setopt(CURLOPT_VERBOSE, 1) if $options{d}; + $curl->setopt(CURLOPT_FAILONERROR, 1); + $curl->setopt(CURLOPT_USERAGENT, + "OpenTSA tsget.pl/openssl-3.3.1"); + + # Options for POST method. + $curl->setopt(CURLOPT_UPLOAD, 1); + $curl->setopt(CURLOPT_CUSTOMREQUEST, "POST"); + $curl->setopt(CURLOPT_HTTPHEADER, + ["Content-Type: application/timestamp-query", + "Accept: application/timestamp-reply,application/timestamp-response"]); + $curl->setopt(CURLOPT_READFUNCTION, \&read_body); + $curl->setopt(CURLOPT_HEADERFUNCTION, sub { return length($_[0]); }); + + # Options for getting the result. + $curl->setopt(CURLOPT_WRITEFUNCTION, \&write_body); + + # SSL related options. + $curl->setopt(CURLOPT_SSLKEYTYPE, "PEM"); + $curl->setopt(CURLOPT_SSL_VERIFYPEER, 1); # Verify server's certificate. + $curl->setopt(CURLOPT_SSL_VERIFYHOST, 2); # Check server's CN. + $curl->setopt(CURLOPT_SSLKEY, $options{k}) if defined($options{k}); + $curl->setopt(CURLOPT_SSLKEYPASSWD, $options{p}) if defined($options{p}); + $curl->setopt(CURLOPT_SSLCERT, $options{c}) if defined($options{c}); + $curl->setopt(CURLOPT_CAINFO, $options{C}) if defined($options{C}); + $curl->setopt(CURLOPT_CAPATH, $options{P}) if defined($options{P}); + $curl->setopt(CURLOPT_RANDOM_FILE, $options{r}) if defined($options{r}); + $curl->setopt(CURLOPT_EGDSOCKET, $options{g}) if defined($options{g}); + + # Setting destination. + $curl->setopt(CURLOPT_URL, $url); + + return $curl; +} + +# Send a request and returns the body back. +sub get_timestamp { + my $curl = shift; + my $body = shift; + my $ts_body; + local $::error_buf; + + # Error-handling related options. + $curl->setopt(CURLOPT_ERRORBUFFER, "::error_buf"); + + # Options for POST method. + $curl->setopt(CURLOPT_INFILE, {data => $body, bytes => 0}); + $curl->setopt(CURLOPT_INFILESIZE, length(${$body})); + + # Options for getting the result. + $curl->setopt(CURLOPT_FILE, \$ts_body); + + # Send the request... + my $error_code = $curl->perform(); + my $error_string; + if ($error_code != 0) { + my $http_code = $curl->getinfo(CURLINFO_HTTP_CODE); + $error_string = "could not get timestamp"; + $error_string .= ", http code: $http_code" unless $http_code == 0; + $error_string .= ", curl code: $error_code"; + $error_string .= " ($::error_buf)" if defined($::error_buf); + } else { + my $ct = $curl->getinfo(CURLINFO_CONTENT_TYPE); + if (lc($ct) ne "application/timestamp-reply" + && lc($ct) ne "application/timestamp-response") { + $error_string = "unexpected content type returned: $ct"; + } + } + return ($ts_body, $error_string); + +} + +# Print usage information and exists. +sub usage { + + print STDERR "usage: $0 -h [-e ] [-o ] "; + print STDERR "[-v] [-d] [-k ] [-p ] "; + print STDERR "[-c ] [-C ] [-P ] "; + print STDERR "[-r ] [-g ] []...\n"; + exit 1; +} + +# ---------------------------------------------------------------------- +# Main program +# ---------------------------------------------------------------------- + +# Getting command-line options (default comes from TSGET environment variable). +my $getopt_arg = "h:e:o:vdk:p:c:C:P:r:g:"; +if (exists $ENV{TSGET}) { + my @old_argv = @ARGV; + @ARGV = split /\s+/, $ENV{TSGET}; + getopts($getopt_arg, \%options) or usage; + @ARGV = @old_argv; +} +getopts($getopt_arg, \%options) or usage; + +# Checking argument consistency. +if (!exists($options{h}) || (@ARGV == 0 && !exists($options{o})) + || (@ARGV > 1 && exists($options{o}))) { + print STDERR "Inconsistent command line options.\n"; + usage; +} +# Setting defaults. +@ARGV = ("-") unless @ARGV != 0; +$options{e} = ".tsr" unless defined($options{e}); + +# Processing requests. +my $curl = create_curl $options{h}; +undef $/; # For reading whole files. +REQUEST: foreach (@ARGV) { + my $input = $_; + my ($base, $path) = fileparse($input, '\.[^.]*'); + my $output_base = $base . $options{e}; + my $output = defined($options{o}) ? $options{o} : $path . $output_base; + + STDERR->printflush("$input: ") if $options{v}; + # Read request. + my $body; + if ($input eq "-") { + # Read the request from STDIN; + $body = ; + } else { + # Read the request from file. + open INPUT, "<" . $input + or warn("$input: could not open input file: $!\n"), next REQUEST; + $body = ; + close INPUT + or warn("$input: could not close input file: $!\n"), next REQUEST; + } + + # Send request. + STDERR->printflush("sending request") if $options{v}; + + my ($ts_body, $error) = get_timestamp $curl, \$body; + if (defined($error)) { + die "$input: fatal error: $error\n"; + } + STDERR->printflush(", reply received") if $options{v}; + + # Write response. + if ($output eq "-") { + # Write to STDOUT. + print $ts_body; + } else { + # Write to file. + open OUTPUT, ">", $output + or warn("$output: could not open output file: $!\n"), next REQUEST; + print OUTPUT $ts_body; + close OUTPUT + or warn("$output: could not close output file: $!\n"), next REQUEST; + } + STDERR->printflush(", $output written.\n") if $options{v}; +} +$curl->cleanup(); diff --git a/package.json b/package.json index d7e7a7f..638dd5c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,11 @@ "version": "2.1.0", "main": "dist-electron/main/index.js", "description": "res-downloader(爱享素材下载器),支持视频号、小程序、抖音、快手、小红书、酷狗音乐、qq音乐、qq短视频等", - "author": "putyy@qq.com", + "homepage": "https://github.com/putyy/res-downloader", + "author": { + "name": "putyy", + "email": "putyy@qq.com" + }, "license": "MIT", "private": true, "keywords": [