.\" Man page generated from reStructuredText .\" by the Docutils 0.22.4 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "PYOTP" "1" "Jun 16, 2026" "" "PyOTP" .SH "نام (NAME)" pyotp \- کتابخانه پایتون برای تولید و اعتبارسنجی گذرواژه‌های یک‌بارمصرف .sp PyOTP یک کتابخانه پایتون برای تولید و اعتبارسنجی گذرواژه‌های یک‌بارمصرف (OTP) است. این کتابخانه می‌تواند برای پیاده‌سازی روش‌های احراز هویت دوعاملی (2FA) یا چندعاملی (MFA) در برنامه‌های وب و سایر سامانه‌هایی که نیازمند ورود کاربر هستند استفاده شود. .sp استانداردهای باز MFA در RFC 4226 \% (الگوریتم رمز یک‌بارمصرف مبتنی بر هش \- HOTP) و RFC 6238 \% (الگوریتم رمز یک‌بارمصرف مبتنی بر زمان \- TOTP) تعریف شده‌اند. ابزار PyOTP پشتیبانی سمت سرور را برای هر دوی این استانداردها پیاده‌سازی می‌کند. پشتیبانی سمت کاربر را می‌توان با ارسال کدهای احراز هویت از طریق پیامک یا ایمیل (HOTP) یا برای TOTP با راهنمایی کاربران جهت استفاده از Google Authenticator \%، Authy \% یا سایر برنامه‌های سازگار فراهم کرد. کاربران می‌توانند با استفاده از دوربین تلفن همراه خود و اسکن کدهای تصویری QR با قالب otpauth:// \% که توسط PyOTP فراهم می‌شود، به آسانی توکن‌های احراز هویت را در برنامه‌های خود پیکربندی کنند. .sp توسعه‌دهندگان و پیاده‌سازان باید بخش‌های الزامات امنیتی HOTP \% و ملاحظات امنیتی TOTP \% از RFCهای مربوطه را مطالعه و رعایت کنند. در کمترین حالت، پیاده‌سازان برنامه باید این چک‌لیست را دنبال نمایند: .INDENT 0.0 .IP \(bu 2 محرمانگی مسیر انتقال را با استفاده از HTTPS تضمین کنید .IP \(bu 2 محرمانگی کلیدهای محرمانه HOTP/TOTP را با ذخیره آن‌ها در یک پایگاه داده با دسترسی کنترل‌شده تضمین کنید .IP \(bu 2 با رد کردن رمزهای یک‌بارمصرف استفاده‌شده توسط کاربر، از حملات بازپخش (Replay Attacks) جلوگیری کنید (این امر مستلزم ذخیره آخرین برچسب زمانی احراز هویت، OTP یا هش آن در پایگاه داده شما و رد کردن OTP در صورت تطابق است) .IP \(bu 2 حملات بروت‌فورس علیه سازوکار ورود به برنامه را مهار (محدودسازی نرخ) کنید (به RFC 4226، بخش 7.3 مراجعه کنید) .IP \(bu 2 هنگام پیاده‌سازی برنامه‌های جدید، پشتیبانی از FIDO U2F \% یا WebAuthn \% را علاوه بر یا به جای HOTP/TOTP در نظر بگیرید. شیوه U2F از رمزنگاری نامتقارن برای پرهیز از طراحی مبتنی بر کلید مشترک استفاده می‌کند که راهکار MFA شما را در برابر حملات سمت سرور مقاوم‌تر می‌سازد. همچنین U2F سخت‌افزاری، کلید محرمانه کاربر را در یک دستگاه تک‌منظوره اختصاصی ایزوله می‌کند که کاربران شما را در برابر حملات سمت کاربر ایمن می‌سازد. علاوه بر این، U2F با مقیدسازی خودکار اطلاعات هویتی به شناسه‌های Relying Party (نام‌های مبدا یا دامنه برنامه)، محافظت در برابر حملات فیشینگ را افزایش می‌دهد. یک پیاده‌سازی از FIDO U2F/WebAuthn، پروژه هم‌خانواده PyOTP به نام PyWARP \%\& است. .UNINDENT .sp همچنین توصیه می‌کنیم پیاده‌سازان مستندات زیر را برای مروری جامع بر بهترین روش‌های احراز هویت مطالعه کنند: OWASP Authentication Cheat Sheet \% و NIST SP 800\-63\-3: Digital Authentication Guideline \% . .SH "مروری کوتاه بر استفاده از رمزهای یک‌بارمصرف روی گوشی همراه (QUICK OVERVIEW OF USING ONE TIME PASSWORDS ON YOUR PHONE)" .INDENT 0.0 .IP \(bu 2 رمزهای یک‌بارمصرف بر پایه یک کلید محرمانه مشترک کار می‌کنند که هم روی گوشی و هم روی سرور ذخیره می‌شود .IP \(bu 2 رمزهای یک‌بارمصرف را می‌توان روی گوشی بدون نیاز به اتصال اینترنت تولید کرد .IP \(bu 2 رمزهای یک‌بارمصرف همواره باید به عنوان عامل دوم احراز هویت به کار روند (اگر گوشی شما مفقود شود، حساب کاربری شما همچنان با گذرواژه ایمن است) .IP \(bu 2 برنامه Google Authenticator و سایر برنامه‌های کلاینت OTP امکان ذخیره‌سازی چندین کلید محرمانه OTP و بارگذاری آن‌ها را با استفاده از QR Code فراهم می‌کنند .UNINDENT .SH "نصب (INSTALLATION)" .INDENT 0.0 .INDENT 3.5 .sp .EX pip install pyotp .EE .UNINDENT .UNINDENT .SH "نحوه استفاده (USAGE)" .SS "رمزهای یک‌بارمصرف مبتنی بر زمان (Time-based OTPs)" .INDENT 0.0 .INDENT 3.5 .sp .EX import pyotp import time totp = pyotp.TOTP(\(aqbase32secret3232\(aq) totp.now() # => \(aq492039\(aq # OTP verified for current time totp.verify(\(aq492039\(aq) # => True time.sleep(30) totp.verify(\(aq492039\(aq) # => False .EE .UNINDENT .UNINDENT .SS "رمزهای یک‌بارمصرف مبتنی بر شمارنده (Counter-based OTPs)" .INDENT 0.0 .INDENT 3.5 .sp .EX import pyotp hotp = pyotp.HOTP(\(aqbase32secret3232\(aq) hotp.at(0) # => \(aq260182\(aq hotp.at(1) # => \(aq055283\(aq hotp.at(1401) # => \(aq316439\(aq # OTP verified with a counter hotp.verify(\(aq316439\(aq, 1401) # => True hotp.verify(\(aq316439\(aq, 1402) # => False .EE .UNINDENT .UNINDENT .SS "تولید کلید محرمانه (Generating a Secret Key)" .sp یک تابع کمکی برای تولید کلید محرمانه ۳۲ کاراکتری در قالب base32 و سازگار با Google Authenticator و سایر برنامه‌های OTP فراهم شده است: .INDENT 0.0 .INDENT 3.5 .sp .EX pyotp.random_base32() .EE .UNINDENT .UNINDENT .sp برخی برنامه‌ها ترجیح می‌دهند کلید محرمانه به صورت رشته‌ای با کدگذاری هگزادسیمال قالب‌بندی شود: .INDENT 0.0 .INDENT 3.5 .sp .EX pyotp.random_hex() # returns a 40\-character hex\-encoded secret .EE .UNINDENT .UNINDENT .SS "سازگاری با Google Authenticator (Google Authenticator Compatible)" .sp کتابخانه PyOTP با برنامه Google Authenticator در iPhone و Android و همچنین سایر برنامه‌های OTP مانند Authy کار می‌کند. همچنین PyOTP شامل قابلیت تولید URIهای پیکربندی جهت استفاده با اسکنر QR Code داخلی این برنامه‌های کلاینت MFA است: .INDENT 0.0 .INDENT 3.5 .sp .EX pyotp.totp.TOTP(\(aqJBSWY3DPEHPK3PXP\(aq).provisioning_uri(name=\(aqalice@google.com\(aq, issuer_name=\(aqSecure App\(aq) >>> \(aqotpauth://totp/Secure%20App:alice%40google.com?secret=JBSWY3DPEHPK3PXP&issuer=Secure%20App\(aq pyotp.hotp.HOTP(\(aqJBSWY3DPEHPK3PXP\(aq).provisioning_uri(name=\(dqalice@google.com\(dq, issuer_name=\(dqSecure App\(dq, initial_count=0) >>> \(aqotpauth://hotp/Secure%20App:alice%40google.com?secret=JBSWY3DPEHPK3PXP&issuer=Secure%20App&counter=0\(aq .EE .UNINDENT .UNINDENT .sp سپس این آدرس اینترنتی می‌تواند به صورت یک QR Code رندر شود (برای نمونه با \%) تا کاربر آن را اسکن کرده و به فهرست اعتبارسنج‌های OTP خود بیفزاید. .sp تجزیه این نشانی‌ها نیز پشتیبانی می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX pyotp.parse_uri(\(aqotpauth://totp/Secure%20App:alice%40google.com?secret=JBSWY3DPEHPK3PXP&issuer=Secure%20App\(aq) >>> pyotp.parse_uri(\(aqotpauth://hotp/Secure%20App:alice%40google.com?secret=JBSWY3DPEHPK3PXP&issuer=Secure%20App&counter=0\(aq >>> .EE .UNINDENT .UNINDENT .SS "مثال کاربردی (Working example)" .sp بارکد زیر را با برنامه OTP تلفن همراه خود (مانند Google Authenticator) اسکن کنید: [image] .sp اکنون دستورات زیر را اجرا کرده و خروجی را مقایسه نمایید: .INDENT 0.0 .INDENT 3.5 .sp .EX import pyotp totp = pyotp.TOTP(\(dqJBSWY3DPEHPK3PXP\(dq) print(\(dqCurrent OTP:\(dq, totp.now()) .EE .UNINDENT .UNINDENT .SS "مشارکت‌های متفرقه (Third-party contributions)" .sp مشارکت‌های متفرقه زیر توسط استانداردی توصیف نشده‌اند، رسماً پشتیبانی نمی‌شوند و صرفاً جهت ارجاع ارائه شده‌اند: .INDENT 0.0 .IP \(bu 2 \fBpyotp.contrib.Steam()\fP: یک پیاده‌سازی از TOTP برای پلتفرم Steam. از همان واسط برنامه‌نویسی \fIpyotp.TOTP()\fP\& استفاده می‌کند. .UNINDENT .SS "پیوندها (Links)" .INDENT 0.0 .IP \(bu 2 صفحه اصلی پروژه (GitHub) \% .IP \(bu 2 مستندات \% .IP \(bu 2 توزیع بسته (PyPI) \% .IP \(bu 2 گزارش تغییرات \% .IP \(bu 2 RFC 4226: HOTP: An HMAC\-Based One\-Time Password \% .IP \(bu 2 RFC 6238: TOTP: Time\-Based One\-Time Password Algorithm \% .IP \(bu 2 ROTP \% \- کتابخانه اصلی Ruby OTP توسط Mark Percival \% .IP \(bu 2 OTPHP \% \- پورت PHP از ROTP توسط Le Lag \% .IP \(bu 2 OWASP Authentication Cheat Sheet \% .IP \(bu 2 NIST SP 800\-63\-3: Digital Authentication Guideline \% .UNINDENT .sp برای برنامه‌های جدید: .INDENT 0.0 .IP \(bu 2 WebAuthn \% .IP \(bu 2 PyWARP \% .UNINDENT .SS "نسخه‌گذاری (Versioning)" .sp این بسته از استاندارد نسخه‌بندی معنایی Semantic Versioning 2.0.0 \% پیروی می‌کند. برای کنترل تغییرات، توصیه می‌شود توسعه‌دهندگان برنامه نسخه بسته را تثبیت (pin) کرده و آن را با استفاده از pip\-tools \% یا ابزارهای مشابه مدیریت کنند. برای توسعه‌دهندگان کتابخانه، تثبیت نسخه اصلی پیشنهاد می‌شود. [image] \%[image] \%[image] \%[image] \%[image] \%.INDENT 0.0 .TP .B pyotp.parse_uri(uri: str \%) -> OTP شناسه URI پیکربندی را برای OTP تجزیه می‌کند؛ هم برای TOTP و هم برای HOTP کار می‌کند. .INDENT 7.0 .TP .B "همچنین ببینید:" \% .UNINDENT .INDENT 7.0 .TP .B "پارامترها:" \fBuri\fP \-\- نشانی hotp/totp URI برای تجزیه .TP .B "بازگشتی:" شیء OTP .UNINDENT .UNINDENT .INDENT 0.0 .TP .B class pyotp.totp.TOTP(s: str \%, digits: int \% = 6, digest: Any \% = None, name: str \% | None \% = None, issuer: str \% | None \% = None, interval: int \% = 30) مدیریت‌کننده شمارنده‌های OTP مبتنی بر زمان. .INDENT 7.0 .TP .B at(for_time: int \% | datetime \%, counter_offset: int \% = 0) -> str \% یک عدد صحیح به عنوان برچسب زمانی یونیکس یا یک شیء datetime را می‌پذیرد. .sp برای دریافت مدت زمان تا تغییر بعدی کد زمانی (ثانیه‌های باقی‌مانده تا انقضای OTP فعلی)، به جای آن از این روش استفاده کنید: .INDENT 7.0 .INDENT 3.5 .sp .EX totp = pyotp.TOTP(...) time_remaining = totp.interval \- datetime.datetime.now().timestamp() % totp.interval .EE .UNINDENT .UNINDENT .INDENT 7.0 .TP .B "پارامترها:" .INDENT 7.0 .IP \(bu 2 \fBfor_time\fP \-\- زمان مورد نظر برای تولید OTP .IP \(bu 2 \fBcounter_offset\fP \-\- میزان تیک‌های اضافه شونده به شمارنده زمان .UNINDENT .TP .B "بازگشتی:" مقدار OTP .UNINDENT .UNINDENT .INDENT 7.0 .TP .B now() -> str \% تولید OTP برای زمان جاری .INDENT 7.0 .TP .B "بازگشتی:" مقدار OTP .UNINDENT .UNINDENT .INDENT 7.0 .TP .B provisioning_uri(name: str \% | None \% = None, issuer_name: str \% | None \% = None, **kwargs) -> str \% نشانی URI پیکربندی را برای OTP برمی‌گرداند. این مقدار می‌تواند در یک QR Code کدگذاری شده و برای پیکربندی برنامه‌های OTP مانند Google Authenticator به کار رود. .INDENT 7.0 .TP .B "همچنین ببینید:" \% .UNINDENT .UNINDENT .INDENT 7.0 .TP .B timecode(for_time: datetime \%) -> int \% یک شیء datetime بدون منطقه زمانی (\fIfor_time.tzinfo is None\fP) یا با منطقه زمانی را به عنوان آرگومان پذیرفته و مقدار شمارنده متناظر (timecode) را برمی‌گرداند. .UNINDENT .INDENT 7.0 .TP .B verify(otp: str \%, for_time: datetime \% | None \% = None, valid_window: int \% = 0) -> bool \% رمز OTP ارسال‌شده را با OTP زمان فعلی اعتبارسنجی می‌کند. .INDENT 7.0 .TP .B "پارامترها:" .INDENT 7.0 .IP \(bu 2 \fBotp\fP \-\- مقدار OTP مورد نظر جهت بررسی .IP \(bu 2 \fBfor_time\fP \-\- زمانی که OTP در آن بررسی می‌شود (پیش‌فرض زمان جاری است) .IP \(bu 2 \fBvalid_window\fP \-\- بازه اعتبار را به این تعداد تیک شمارنده قبل و بعد از مقدار فعلی گسترش می‌دهد .UNINDENT .TP .B "بازگشتی:" در صورت موفقیت‌آمیز بودن اعتبارسنجی True، در غیر این صورت False .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B class pyotp.hotp.HOTP(s: str \%, digits: int \% = 6, digest: Any \% = None, name: str \% | None \% = None, issuer: str \% | None \% = None, initial_count: int \% = 0) مدیریت‌کننده شمارنده‌های OTP مبتنی بر HMAC. .INDENT 7.0 .TP .B at(count: int \%) -> str \% مقدار OTP را برای شمارنده داده‌شده تولید می‌کند. .INDENT 7.0 .TP .B "پارامترها:" \fBcount\fP \-\- شمارنده HMAC برای OTP .TP .B "بازگشتی:" مقدار OTP .UNINDENT .UNINDENT .INDENT 7.0 .TP .B provisioning_uri(name: str \% | None \% = None, initial_count: int \% | None \% = None, issuer_name: str \% | None \% = None, **kwargs) -> str \% نشانی URI پیکربندی را برای OTP برمی‌گرداند. این مقدار می‌تواند در یک QR Code کدگذاری شده و برای پیکربندی برنامه‌های OTP مانند Google Authenticator به کار رود. .INDENT 7.0 .TP .B "همچنین ببینید:" \% .UNINDENT .INDENT 7.0 .TP .B "پارامترها:" .INDENT 7.0 .IP \(bu 2 \fBname\fP \-\- نام حساب کاربری .IP \(bu 2 \fBinitial_count\fP \-\- مقدار اولیه شمارنده HMAC، پیش‌فرض 0 است .IP \(bu 2 \fBissuer_name\fP \-\- نام صادرکننده OTP؛ این عنوان سازمان در ورودی Authenticator خواهد بود .UNINDENT .TP .B "بازگشتی:" نشانی provisioning URI .UNINDENT .UNINDENT .INDENT 7.0 .TP .B verify(otp: str \%, counter: int \%) -> bool \% رمز OTP ارسال‌شده را در برابر OTP شمارنده فعلی اعتبارسنجی می‌کند. .INDENT 7.0 .TP .B "پارامترها:" .INDENT 7.0 .IP \(bu 2 \fBotp\fP \-\- مقدار OTP مورد نظر جهت بررسی .IP \(bu 2 \fBcounter\fP \-\- شمارنده HMAC برای OTP .UNINDENT .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B pyotp.utils.build_uri(secret: str \%, name: str \%, initial_count: int \% | None \% = None, issuer: str \% | None \% = None, algorithm: str \% | None \% = None, digits: int \% | None \% = None, period: int \% | None \% = None, **kwargs) -> str \% نشانی URI پیکربندی را برای OTP برمی‌گرداند؛ هم برای TOTP و هم برای HOTP کار می‌کند. .sp سپس می‌توان این مقدار را در یک QR Code کدگذاری کرده و برای پیکربندی برنامه Google Authenticator استفاده نمود. .sp جهت استفاده داخلی ماژول. .INDENT 7.0 .TP .B "همچنین ببینید:" \% .UNINDENT .INDENT 7.0 .TP .B "پارامترها:" .INDENT 7.0 .IP \(bu 2 \fBsecret\fP \-\- کلید محرمانه hotp/totp استفاده‌شده برای تولید URI .IP \(bu 2 \fBname\fP \-\- نام حساب کاربری .IP \(bu 2 \fBinitial_count\fP \-\- مقدار اولیه شمارنده، پیش‌فرض None است. در صورت None بودن، نوع OTP به عنوان TOTP در نظر گرفته می‌شود. .IP \(bu 2 \fBissuer\fP \-\- نام صادرکننده OTP؛ این عنوان سازمان در ورودی Authenticator خواهد بود .IP \(bu 2 \fBalgorithm\fP \-\- الگوریتم استفاده‌شده در تولید OTP. .IP \(bu 2 \fBdigits\fP \-\- طول کد تولیدشده OTP. .IP \(bu 2 \fBperiod\fP \-\- تعداد ثانیه‌هایی که تولیدکننده OTP برای انقضای هر کد تنظیم شده است. .IP \(bu 2 \fBkwargs\fP \-\- سایر پارامترهای query string برای گنجاندن در URI .UNINDENT .TP .B "بازگشتی:" نشانی provisioning uri .UNINDENT .UNINDENT .INDENT 0.0 .TP .B pyotp.utils.strings_equal(s1: str \%, s2: str \%) -> bool \% مقایسه رشته مقاوم در برابر حملات تحلیل زمانی (Timing attacks). .sp مقایسه عادی با == در اولین نویسه نامطابق متوقف می‌شود (short-circuit). این تابع با پیمایش کل رشته از این مشکل جلوگیری می‌کند، هرچند همچنان طول برابر رشته‌ها در برابر حمله زمانی آشکار می‌شود. .UNINDENT .INDENT 0.0 .TP .B class pyotp.contrib.steam.Steam(s: str \%, name: str \% | None \% = None, issuer: str \% | None \% = None, interval: int \% = 30, digits: int \% = 5) پیاده‌سازی سفارشی TOTP متعلق به پلتفرم Steam. زیرکلاسی از \fIpyotp.totp.TOTP\fP\&. .INDENT 7.0 .TP .B generate_otp(input: int \%) -> str \% .INDENT 7.0 .TP .B "پارامترها:" \fBinput\fP \-\- مقدار شمارنده HMAC جهت استفاده به عنوان ورودی OTP. معمولاً یا شمارنده است یا عدد صحیح محاسبه‌شده بر پایه برچسب زمانی یونیکس .UNINDENT .UNINDENT .UNINDENT .SH "یادداشت‌های انتشار (RELEASE NOTES)" .SH "تغییرات نسخه 2.10.0 (CHANGES FOR V2.10.0 - 2026-06-13)" .INDENT 0.0 .IP \(bu 2 رفع خطای تجزیه دونقطه کدگذاری‌شده در نام صادرکننده/حساب در parse_uri (#187) .IP \(bu 2 ساده‌سازی و بهبود کارایی generate_otp() در کلاس Steam (#179) .IP \(bu 2 بررسی تابع خلاصه‌ساز جهت جلوگیری از بروز خطا در تولید OTP (#170) .IP \(bu 2 نادیده گرفتن پارامترهای غیراستاندارد otpauth .IP \(bu 2 استفاده از رشته‌ها به عنوان آرگومان‌های پیش‌فرض تغییرناپذیر (#162) .UNINDENT .SH "تغییرات نسخه 2.9.0 (CHANGES FOR V2.9.0 - 2023-07-27)" .INDENT 0.0 .IP \(bu 2 افزودن پشتیبانی از Steam TOTP در \fBparse_uri()\fP (#153) .IP \(bu 2 بهبود تست‌ها و مستندات .UNINDENT .SH "تغییرات نسخه 2.8.0 (CHANGES FOR V2.8.0 - 2022-12-13)" .INDENT 0.0 .IP \(bu 2 تغییر تولید OTP جهت اجرا در زمان ثابت (constant time) (#148) .IP \(bu 2 بهبود مستندات .IP \(bu 2 حذف پشتیبانی از پایتون 3.6؛ آغاز پشتیبانی از پایتون 3.11 .UNINDENT .SH "تغییرات نسخه 2.7.0 (CHANGES FOR V2.7.0 - 2022-09-11)" .INDENT 0.0 .IP \(bu 2 پشتیبانی از Steam TOTP (#142) .IP \(bu 2 به‌روزرسانی‌های ساخت، آزمون و مستندات .UNINDENT .SH "تغییرات نسخه 2.6.0 (CHANGES FOR V2.6.0 - 2021-02-04)" .INDENT 0.0 .IP \(bu 2 افزایش طول پیش‌فرض و کمینه کلید محرمانه base32 به ۳۲ و کلید هگز به ۴۰ (۱۶۰ بیت طبق توصیه RFC) (#115). .IP \(bu 2 رفع اشکالی که در آن provisioning_uri پس از فراخوانی verify() نتایج نامعتبر برمی‌گرداند (#115). .UNINDENT .SH "تغییرات نسخه 2.5.1 (CHANGES FOR V2.5.1 - 2021-01-29)" .INDENT 0.0 .IP \(bu 2 تابع parse_uri پارامتر اختیاری تصویر را می‌پذیرد و نادیده می‌گیرد (#114) .UNINDENT .SH "تغییرات نسخه 2.5.0 (CHANGES FOR V2.5.0 - 2021-01-29)" .INDENT 0.0 .IP \(bu 2 افزودن پارامتر اختیاری تصویر به provisioning_uri (#113) .IP \(bu 2 پشتیبانی از کدهای ۷ رقمی در ‘parse_uri’ (#111) .IP \(bu 2 افزایش طول پیش‌فرض و کمینه کلید محرمانه base32 به ۲۶ .UNINDENT .SH "تغییرات نسخه 2.4.1 (CHANGES FOR V2.4.1 - 2020-10-16)" .INDENT 0.0 .IP \(bu 2 تابع parse_uri: رفع مدیریت دوره تناوب و شمارنده (#108) .IP \(bu 2 افزودن پشتیبانی از datetime با منطقه زمانی مشخص به عنوان آرگومان در \fBTOTP.timecode()\fP (#107) .UNINDENT .SH "تغییرات نسخه 2.4.0 (CHANGES FOR V2.4.0 - 2020-07-29)" .INDENT 0.0 .IP \(bu 2 اصلاح نوع داده برای at(for_time) (#85) .IP \(bu 2 افزودن پشتیبانی از تجزیه نشانی‌های provisioning URI (#84) .IP \(bu 2 ایجاد خطا هنگام تلاش برای تولید کلید محرمانه بسیار کوتاه (کلید باید دست‌کم ۱۲۸ بیت باشد) .IP \(bu 2 افزودن تابع random_hex (#82) .UNINDENT .SH "تغییرات نسخه 2.3.0 (CHANGES FOR V2.3.0 - 2019-07-26)" .INDENT 0.0 .IP \(bu 2 اصلاح رفتار مقایسه در پایتون 2.7 .UNINDENT .SH "تغییرات نسخه 2.2.8 (CHANGES FOR V2.2.8 - 2019-07-26)" .INDENT 0.0 .IP \(bu 2 اصلاح مقایسه نویسه‌های یونیکد (#78) .IP \(bu 2 اصلاحات جزئی در مستندات و تست‌ها .UNINDENT .SH "تغییرات نسخه 2.2.7 (CHANGES FOR V2.2.7 - 2018-11-05)" .INDENT 0.0 .IP \(bu 2 استفاده random_base32() از ‘secrets’ به عنوان منبع اعداد تصادفی (#66) .IP \(bu 2 مستندات: افزودن ملاحظات امنیتی، حداقل چک‌لیست امنیتی و سایر بهبودها .IP \(bu 2 به‌روزرسانی setup.py جهت ارجاع به مجوز صحیح .UNINDENT .SH "تغییرات نسخه 2.2.6 (CHANGES FOR V2.2.6 - 2017-06-10)" .INDENT 0.0 .IP \(bu 2 اصلاح آزمون‌ها در رابطه با نقل‌قول دوتایی در نشانی‌های provisioning URI .UNINDENT .SH "تغییرات نسخه 2.2.5 (CHANGES FOR V2.2.5 - 2017-06-03)" .INDENT 0.0 .IP \(bu 2 نقل‌قول پارامتر صادرکننده در query string در provisioning_uri. رفع مشکل #47. .IP \(bu 2 ایجاد استثنا در صورت ارسال عدد صحیح منفی به at() (#41). .IP \(bu 2 بهبودهای مستندات و زیرساخت انتشار. .UNINDENT .SH "تغییرات نسخه 2.2.4 (CHANGES FOR V2.2.4 - 2017-01-04)" .INDENT 0.0 .IP \(bu 2 بازگردانی سازگاری با پایتون 2.6 (البته پایتون 2.6 پشتیبانی نمی‌شود) .IP \(bu 2 بهبودهای مستندات و تست‌ها .IP \(bu 2 اصلاح اسکریپت زیرساخت انتشار، بخش ۲ .UNINDENT .SH "تغییرات نسخه 2.2.3 (CHANGES FOR V2.2.3 - 2017-01-04)" .INDENT 0.0 .IP \(bu 2 بازگردانی سازگاری با پایتون 2.6 (البته پایتون 2.6 پشتیبانی نمی‌شود) .IP \(bu 2 بهبودهای مستندات و تست‌ها .IP \(bu 2 اصلاح اسکریپت زیرساخت انتشار .UNINDENT .SH "تغییرات نسخه 2.2.2 (CHANGES FOR V2.2.2 - 2017-01-04)" .INDENT 0.0 .IP \(bu 2 بازگردانی سازگاری با پایتون 2.6 (البته پایتون 2.6 پشتیبانی نمی‌شود) .IP \(bu 2 بهبودهای مستندات و تست‌ها .UNINDENT .SH "تغییرات نسخه 2.2.1 (CHANGES FOR V2.2.1 - 2016-08-30)" .INDENT 0.0 .IP \(bu 2 پرهیز از استفاده از python\-future؛ وابستگی‌های فرعی دارد که سازگاری را محدود می‌کنند (#34) .IP \(bu 2 موفقیت‌آمیز بودن مجموعه آزمون‌ها روی پلتفرم‌های ۳۲ بیتی (#30) .IP \(bu 2 اصلاح مقاومت در برابر حمله تحلیل زمانی: عدم افشای طول رشته به مهاجم. با تشکر از Eeo Jun (#28). .IP \(bu 2 پشتیبانی از پارامترهای algorithm، digits و period در provisioning_uri. با تشکر از Dionisio E Alonso (#33). .IP \(bu 2 اصلاحات جزئی نگارش و زیرساخت بسته‌بندی. .UNINDENT .SH "تغییرات نسخه 2.2.0 (CHANGES FOR V2.2.0 - 2016-08-30)" .INDENT 0.0 .IP \(bu 2 نسخه 2.2.1 را ببینید .UNINDENT .SS "نسخه 2.1.0 (Version 2.1.0 - 2016\-05\-02)" .INDENT 0.0 .IP \(bu 2 افزودن پشتیبانی از بازه گسترش‌یافته به TOTP.verify. با تشکر از Zeev Rotshtein (PR #19). .IP \(bu 2 مدیریت پدینگ مفقود در کلید کدگذاری‌شده. با تشکر از Kun Yan (#20). .IP \(bu 2 اصلاحات متفرقه. .UNINDENT .SS "نسخه 2.0.1 (Version 2.0.1 - 2015\-09\-28)" .INDENT 0.0 .IP \(bu 2 رفع مشکل بسته‌بندی در نسخه 2.0.0 که مانع از نصب با easy_install می‌شد. .UNINDENT .SS "نسخه 2.0.0 (Version 2.0.0 - 2015\-08\-22)" .INDENT 0.0 .IP \(bu 2 متدهای \fBpyotp.HOTP.at()\fP، \fBpyotp.TOTP.at()\fP و \fBpyotp.TOTP.now()\fP اکنون به جای اعداد صحیح، رشته برمی‌گردانند. با تشکر از Rohan Dhaimade (PR #16). .UNINDENT .SS "نسخه 1.4.2 (Version 1.4.2 - 2015\-07\-21)" .INDENT 0.0 .IP \(bu 2 آغاز ثبت تغییرات در گزارش تغییرات. .IP \(bu 2 به‌روزرسانی مستندات. .IP \(bu 2 معرفی یکپارچه‌سازی با Travis CI. .UNINDENT .SS "نسخه 1.3.1 (Version 1.3.1 - 2012\-02\-29)" .INDENT 0.0 .IP \(bu 2 انتشار اولیه. .UNINDENT .SH "نویسنده (AUTHOR)" مشارکت‌کنندگان PyOTP .SH "حق نشر (COPYRIGHT)" مشارکت‌کنندگان PyOTP .\" End of generated man page.