Difference on montgomery curve equation between EFD and RFC7748How is the curve equation used in ECC?Montgomery Ladder vs Double-and-AddWhat is the difference between order of base point and curve order in EC?Inversion Free Direct Conversion between Twisted Edwards (X,Y,Z) and Montgomery (X,Z)Differential addition on Montgomery curveHow Elliptic Curve equation is chosen?What is the difference between regular and “twisted” ECC curves?Understanding the elliptic curve equation by exampleDiscrete logarithm on Montgomery curve twistCurve 25519 (X25519, Ed25519) Convert coordinates between Montgomery curve and twisted Edwards curve

Can Mathematica be used to create an Artistic 3D extrusion from a 2D image and wrap a line pattern around it?

At what distance can a bugbear, holding a reach weapon, with Polearm Mastery, get their Opportunity Attack?

Are there historical instances of the capital of a colonising country being temporarily or permanently shifted to one of its colonies?

When traveling to Europe from North America, do I need to purchase a different power strip?

Why does Captain Marvel assume the people on this planet know this?

Makefile strange variable substitution

What do you call someone who likes to pick fights?

Why doesn't this Google Translate ad use the word "Translation" instead of "Translate"?

Why is computing ridge regression with a Cholesky decomposition much quicker than using SVD?

Is "conspicuously missing" or "conspicuously" the subject of this sentence?

Is it possible to avoid unpacking when merging Association?

Reverse string, can I make it faster?

How strictly should I take "Candidates must be local"?

NASA's RS-25 Engines shut down time

Reversed Sudoku

Recommendation letter by significant other if you worked with them professionally?

An alternative proof of an application of Hahn-Banach

What is the magic ball of every day?

Are babies of evil humanoid species inherently evil?

Do f-stop and exposure time perfectly cancel?

Are all players supposed to be able to see each others' character sheets?

How are showroom/display vehicles prepared?

is there any evidence to suggest that tamper resistant receptacles (trr's) are safer?

Can one live in the U.S. and not use a credit card?



Difference on montgomery curve equation between EFD and RFC7748


How is the curve equation used in ECC?Montgomery Ladder vs Double-and-AddWhat is the difference between order of base point and curve order in EC?Inversion Free Direct Conversion between Twisted Edwards (X,Y,Z) and Montgomery (X,Z)Differential addition on Montgomery curveHow Elliptic Curve equation is chosen?What is the difference between regular and “twisted” ECC curves?Understanding the elliptic curve equation by exampleDiscrete logarithm on Montgomery curve twistCurve 25519 (X25519, Ed25519) Convert coordinates between Montgomery curve and twisted Edwards curve













3












$begingroup$


There is a subtle difference between the 2 implementations for a Montgomery curve defined from the 2 following links



https://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html




A = X2+Z2
AA = A^2
B = X2-Z2
BB = B^2
E = AA-BB
C = X3+Z3
D = X3-Z3
DA = D*A
CB = C*B
X5 = (DA+CB)^2
Z5 = X1*(DA-CB)^2
X4 = AA*BB
Z4 = E*(BB+a24*E)


https://tools.ietf.org/html/rfc7748




A = x_2 + z_2
AA = A^2
B = x_2 - z_2
BB = B^2
E = AA - BB
C = x_3 + z_3
D = x_3 - z_3
DA = D * A
CB = C * B
x_3 = (DA + CB)^2
z_3 = x_1 * (DA - CB)^2
x_2 = AA * BB
z_2 = E * (AA + a24 * E)


This AA / BB change on the last line does affect the result of a point multiplication with same input parameters.



Is there a reason for that difference ?










share|improve this question











$endgroup$











  • $begingroup$
    It looks to be a typo in RFC. When BB is used (as in EFD and original P.L. Montgomery paper), the test vectors can be reproduced. Submitted a review comment to RFC. Errare humanum est. How many existing implementations will fail to inter-operate ?
    $endgroup$
    – Pierre
    4 hours ago
















3












$begingroup$


There is a subtle difference between the 2 implementations for a Montgomery curve defined from the 2 following links



https://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html




A = X2+Z2
AA = A^2
B = X2-Z2
BB = B^2
E = AA-BB
C = X3+Z3
D = X3-Z3
DA = D*A
CB = C*B
X5 = (DA+CB)^2
Z5 = X1*(DA-CB)^2
X4 = AA*BB
Z4 = E*(BB+a24*E)


https://tools.ietf.org/html/rfc7748




A = x_2 + z_2
AA = A^2
B = x_2 - z_2
BB = B^2
E = AA - BB
C = x_3 + z_3
D = x_3 - z_3
DA = D * A
CB = C * B
x_3 = (DA + CB)^2
z_3 = x_1 * (DA - CB)^2
x_2 = AA * BB
z_2 = E * (AA + a24 * E)


This AA / BB change on the last line does affect the result of a point multiplication with same input parameters.



Is there a reason for that difference ?










share|improve this question











$endgroup$











  • $begingroup$
    It looks to be a typo in RFC. When BB is used (as in EFD and original P.L. Montgomery paper), the test vectors can be reproduced. Submitted a review comment to RFC. Errare humanum est. How many existing implementations will fail to inter-operate ?
    $endgroup$
    – Pierre
    4 hours ago














3












3








3





$begingroup$


There is a subtle difference between the 2 implementations for a Montgomery curve defined from the 2 following links



https://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html




A = X2+Z2
AA = A^2
B = X2-Z2
BB = B^2
E = AA-BB
C = X3+Z3
D = X3-Z3
DA = D*A
CB = C*B
X5 = (DA+CB)^2
Z5 = X1*(DA-CB)^2
X4 = AA*BB
Z4 = E*(BB+a24*E)


https://tools.ietf.org/html/rfc7748




A = x_2 + z_2
AA = A^2
B = x_2 - z_2
BB = B^2
E = AA - BB
C = x_3 + z_3
D = x_3 - z_3
DA = D * A
CB = C * B
x_3 = (DA + CB)^2
z_3 = x_1 * (DA - CB)^2
x_2 = AA * BB
z_2 = E * (AA + a24 * E)


This AA / BB change on the last line does affect the result of a point multiplication with same input parameters.



Is there a reason for that difference ?










share|improve this question











$endgroup$




There is a subtle difference between the 2 implementations for a Montgomery curve defined from the 2 following links



https://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html




A = X2+Z2
AA = A^2
B = X2-Z2
BB = B^2
E = AA-BB
C = X3+Z3
D = X3-Z3
DA = D*A
CB = C*B
X5 = (DA+CB)^2
Z5 = X1*(DA-CB)^2
X4 = AA*BB
Z4 = E*(BB+a24*E)


https://tools.ietf.org/html/rfc7748




A = x_2 + z_2
AA = A^2
B = x_2 - z_2
BB = B^2
E = AA - BB
C = x_3 + z_3
D = x_3 - z_3
DA = D * A
CB = C * B
x_3 = (DA + CB)^2
z_3 = x_1 * (DA - CB)^2
x_2 = AA * BB
z_2 = E * (AA + a24 * E)


This AA / BB change on the last line does affect the result of a point multiplication with same input parameters.



Is there a reason for that difference ?







elliptic-curves x25519 rfc7748 x448






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 5 hours ago









puzzlepalace

2,8701133




2,8701133










asked 6 hours ago









PierrePierre

36718




36718











  • $begingroup$
    It looks to be a typo in RFC. When BB is used (as in EFD and original P.L. Montgomery paper), the test vectors can be reproduced. Submitted a review comment to RFC. Errare humanum est. How many existing implementations will fail to inter-operate ?
    $endgroup$
    – Pierre
    4 hours ago

















  • $begingroup$
    It looks to be a typo in RFC. When BB is used (as in EFD and original P.L. Montgomery paper), the test vectors can be reproduced. Submitted a review comment to RFC. Errare humanum est. How many existing implementations will fail to inter-operate ?
    $endgroup$
    – Pierre
    4 hours ago
















$begingroup$
It looks to be a typo in RFC. When BB is used (as in EFD and original P.L. Montgomery paper), the test vectors can be reproduced. Submitted a review comment to RFC. Errare humanum est. How many existing implementations will fail to inter-operate ?
$endgroup$
– Pierre
4 hours ago





$begingroup$
It looks to be a typo in RFC. When BB is used (as in EFD and original P.L. Montgomery paper), the test vectors can be reproduced. Submitted a review comment to RFC. Errare humanum est. How many existing implementations will fail to inter-operate ?
$endgroup$
– Pierre
4 hours ago











2 Answers
2






active

oldest

votes


















4












$begingroup$

This is not a bug: it arises from different choice of sign in the definition of a24 := (a ± 2)/4; the RFC uses - while the EFD uses +.



RFC, following the Curve25519 paper:




The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and (156326 - 2) / 4 = 39081 for curve448/X448.




EFD, following Montgomery's paper (paywall-free):




Assumptions: 4*a24=a+2.




This apparent discrepancy was raised by Paul Lambert on the CFRG mailing list during discussion on the draft. It doesn't really matter which one you choose, as long as you're consistent about it!






share|improve this answer









$endgroup$












  • $begingroup$
    Thanks for the explanation. I didn't spot the little difference on a24 definition between the RFC and the EFD.
    $endgroup$
    – Pierre
    2 hours ago


















4












$begingroup$

This is not a typo; it is a difference in how the Montgomery doubling formula was derived between the original paper and the curve25519 paper. Both are correct.



To double a point on a Montgomery curve
$$
y^2 = x^3 + Ax^2 + x,,
$$

one has the identity relating the doubled point $(x_3, cdot)$ and the source point $(x_1, cdot)$:
$$
x_3 4x_1(x_1^2 + Ax_1 + 1) = (x_1^2 - 1)^2,.
$$

The doubled point $x_3$ can thus be computed as the fraction
$$
frac(x_1^2 - 1)^24x_1(x_1^2 + Ax_1 + 1),.
$$

But to minimize the operation number, and obtain several common subexpressions, we can write $(x_1^2 - 1)^2$ as $(x_1+1)^2(x_1-1)^2$, $4x_1$ as $(x_1 + 1)^2 - (x_1 - 1)^2$, and $x_1^2 + Ax_1 + 1$ as either $(x_1-1)^2 + ((A+2)/4)4x_1$ or $(x_1+1)^2 + ((A-2)/4)4x_1$. It is this latter somewhat arbitrary choice that results in there being two almost identical Montgomery doubling formulas.






share|improve this answer









$endgroup$












    Your Answer





    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
    );
    );
    , "mathjax-editing");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "281"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    noCode: true, onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcrypto.stackexchange.com%2fquestions%2f67942%2fdifference-on-montgomery-curve-equation-between-efd-and-rfc7748%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    4












    $begingroup$

    This is not a bug: it arises from different choice of sign in the definition of a24 := (a ± 2)/4; the RFC uses - while the EFD uses +.



    RFC, following the Curve25519 paper:




    The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and (156326 - 2) / 4 = 39081 for curve448/X448.




    EFD, following Montgomery's paper (paywall-free):




    Assumptions: 4*a24=a+2.




    This apparent discrepancy was raised by Paul Lambert on the CFRG mailing list during discussion on the draft. It doesn't really matter which one you choose, as long as you're consistent about it!






    share|improve this answer









    $endgroup$












    • $begingroup$
      Thanks for the explanation. I didn't spot the little difference on a24 definition between the RFC and the EFD.
      $endgroup$
      – Pierre
      2 hours ago















    4












    $begingroup$

    This is not a bug: it arises from different choice of sign in the definition of a24 := (a ± 2)/4; the RFC uses - while the EFD uses +.



    RFC, following the Curve25519 paper:




    The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and (156326 - 2) / 4 = 39081 for curve448/X448.




    EFD, following Montgomery's paper (paywall-free):




    Assumptions: 4*a24=a+2.




    This apparent discrepancy was raised by Paul Lambert on the CFRG mailing list during discussion on the draft. It doesn't really matter which one you choose, as long as you're consistent about it!






    share|improve this answer









    $endgroup$












    • $begingroup$
      Thanks for the explanation. I didn't spot the little difference on a24 definition between the RFC and the EFD.
      $endgroup$
      – Pierre
      2 hours ago













    4












    4








    4





    $begingroup$

    This is not a bug: it arises from different choice of sign in the definition of a24 := (a ± 2)/4; the RFC uses - while the EFD uses +.



    RFC, following the Curve25519 paper:




    The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and (156326 - 2) / 4 = 39081 for curve448/X448.




    EFD, following Montgomery's paper (paywall-free):




    Assumptions: 4*a24=a+2.




    This apparent discrepancy was raised by Paul Lambert on the CFRG mailing list during discussion on the draft. It doesn't really matter which one you choose, as long as you're consistent about it!






    share|improve this answer









    $endgroup$



    This is not a bug: it arises from different choice of sign in the definition of a24 := (a ± 2)/4; the RFC uses - while the EFD uses +.



    RFC, following the Curve25519 paper:




    The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and (156326 - 2) / 4 = 39081 for curve448/X448.




    EFD, following Montgomery's paper (paywall-free):




    Assumptions: 4*a24=a+2.




    This apparent discrepancy was raised by Paul Lambert on the CFRG mailing list during discussion on the draft. It doesn't really matter which one you choose, as long as you're consistent about it!







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered 3 hours ago









    Squeamish OssifrageSqueamish Ossifrage

    19.3k12883




    19.3k12883











    • $begingroup$
      Thanks for the explanation. I didn't spot the little difference on a24 definition between the RFC and the EFD.
      $endgroup$
      – Pierre
      2 hours ago
















    • $begingroup$
      Thanks for the explanation. I didn't spot the little difference on a24 definition between the RFC and the EFD.
      $endgroup$
      – Pierre
      2 hours ago















    $begingroup$
    Thanks for the explanation. I didn't spot the little difference on a24 definition between the RFC and the EFD.
    $endgroup$
    – Pierre
    2 hours ago




    $begingroup$
    Thanks for the explanation. I didn't spot the little difference on a24 definition between the RFC and the EFD.
    $endgroup$
    – Pierre
    2 hours ago











    4












    $begingroup$

    This is not a typo; it is a difference in how the Montgomery doubling formula was derived between the original paper and the curve25519 paper. Both are correct.



    To double a point on a Montgomery curve
    $$
    y^2 = x^3 + Ax^2 + x,,
    $$

    one has the identity relating the doubled point $(x_3, cdot)$ and the source point $(x_1, cdot)$:
    $$
    x_3 4x_1(x_1^2 + Ax_1 + 1) = (x_1^2 - 1)^2,.
    $$

    The doubled point $x_3$ can thus be computed as the fraction
    $$
    frac(x_1^2 - 1)^24x_1(x_1^2 + Ax_1 + 1),.
    $$

    But to minimize the operation number, and obtain several common subexpressions, we can write $(x_1^2 - 1)^2$ as $(x_1+1)^2(x_1-1)^2$, $4x_1$ as $(x_1 + 1)^2 - (x_1 - 1)^2$, and $x_1^2 + Ax_1 + 1$ as either $(x_1-1)^2 + ((A+2)/4)4x_1$ or $(x_1+1)^2 + ((A-2)/4)4x_1$. It is this latter somewhat arbitrary choice that results in there being two almost identical Montgomery doubling formulas.






    share|improve this answer









    $endgroup$

















      4












      $begingroup$

      This is not a typo; it is a difference in how the Montgomery doubling formula was derived between the original paper and the curve25519 paper. Both are correct.



      To double a point on a Montgomery curve
      $$
      y^2 = x^3 + Ax^2 + x,,
      $$

      one has the identity relating the doubled point $(x_3, cdot)$ and the source point $(x_1, cdot)$:
      $$
      x_3 4x_1(x_1^2 + Ax_1 + 1) = (x_1^2 - 1)^2,.
      $$

      The doubled point $x_3$ can thus be computed as the fraction
      $$
      frac(x_1^2 - 1)^24x_1(x_1^2 + Ax_1 + 1),.
      $$

      But to minimize the operation number, and obtain several common subexpressions, we can write $(x_1^2 - 1)^2$ as $(x_1+1)^2(x_1-1)^2$, $4x_1$ as $(x_1 + 1)^2 - (x_1 - 1)^2$, and $x_1^2 + Ax_1 + 1$ as either $(x_1-1)^2 + ((A+2)/4)4x_1$ or $(x_1+1)^2 + ((A-2)/4)4x_1$. It is this latter somewhat arbitrary choice that results in there being two almost identical Montgomery doubling formulas.






      share|improve this answer









      $endgroup$















        4












        4








        4





        $begingroup$

        This is not a typo; it is a difference in how the Montgomery doubling formula was derived between the original paper and the curve25519 paper. Both are correct.



        To double a point on a Montgomery curve
        $$
        y^2 = x^3 + Ax^2 + x,,
        $$

        one has the identity relating the doubled point $(x_3, cdot)$ and the source point $(x_1, cdot)$:
        $$
        x_3 4x_1(x_1^2 + Ax_1 + 1) = (x_1^2 - 1)^2,.
        $$

        The doubled point $x_3$ can thus be computed as the fraction
        $$
        frac(x_1^2 - 1)^24x_1(x_1^2 + Ax_1 + 1),.
        $$

        But to minimize the operation number, and obtain several common subexpressions, we can write $(x_1^2 - 1)^2$ as $(x_1+1)^2(x_1-1)^2$, $4x_1$ as $(x_1 + 1)^2 - (x_1 - 1)^2$, and $x_1^2 + Ax_1 + 1$ as either $(x_1-1)^2 + ((A+2)/4)4x_1$ or $(x_1+1)^2 + ((A-2)/4)4x_1$. It is this latter somewhat arbitrary choice that results in there being two almost identical Montgomery doubling formulas.






        share|improve this answer









        $endgroup$



        This is not a typo; it is a difference in how the Montgomery doubling formula was derived between the original paper and the curve25519 paper. Both are correct.



        To double a point on a Montgomery curve
        $$
        y^2 = x^3 + Ax^2 + x,,
        $$

        one has the identity relating the doubled point $(x_3, cdot)$ and the source point $(x_1, cdot)$:
        $$
        x_3 4x_1(x_1^2 + Ax_1 + 1) = (x_1^2 - 1)^2,.
        $$

        The doubled point $x_3$ can thus be computed as the fraction
        $$
        frac(x_1^2 - 1)^24x_1(x_1^2 + Ax_1 + 1),.
        $$

        But to minimize the operation number, and obtain several common subexpressions, we can write $(x_1^2 - 1)^2$ as $(x_1+1)^2(x_1-1)^2$, $4x_1$ as $(x_1 + 1)^2 - (x_1 - 1)^2$, and $x_1^2 + Ax_1 + 1$ as either $(x_1-1)^2 + ((A+2)/4)4x_1$ or $(x_1+1)^2 + ((A-2)/4)4x_1$. It is this latter somewhat arbitrary choice that results in there being two almost identical Montgomery doubling formulas.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 2 hours ago









        Samuel NevesSamuel Neves

        7,6402641




        7,6402641



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Cryptography Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcrypto.stackexchange.com%2fquestions%2f67942%2fdifference-on-montgomery-curve-equation-between-efd-and-rfc7748%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Are there any comparative studies done between Ashtavakra Gita and Buddhim?How is it wrong to believe that a self exists, or that it doesn't?Can you criticise or improve Ven. Bodhi's description of MahayanaWas the doctrine of 'Anatta', accepted as doctrine by modern Buddhism, actually taught by the Buddha?Relationship between Buddhism, Hinduism and Yoga?Comparison of Nirvana, Tao and Brahman/AtmaIs there a distinction between “ego identity” and “craving/hating”?Are there many differences between Taoism and Buddhism?Loss of “faith” in buddhismSimilarity between creation in Abrahamic religions and beginning of life in Earth mentioned Agganna Sutta?Are there studies about the difference between meditating in the morning versus in the evening?Can one follow Hinduism and Buddhism at the same time?Are there any prohibitions on participating in other religion's practices?Psychology of 'flow'

            Where else does the Shulchan Aruch quote an authority by name?Parashat Metzora+HagadolPesach/PassoverShulchan Aruch UTF-8Anonymous glosses in the Shulchan AruchWhy is the Shulchan Aruch definitive?Siman 32, Kitzur Shulchan Aruch: UntranslatedLitvaks/Yeshivish and Shulchan AruchBuying a Shulchan AruchEnglish version of SHULCHAN ARUCHIs there any place where Shulchan Aruch rules with the Rosh against the Rif and Rambam?Are there practices where Sepharadim do not hold by Shulchan Aruch?5th part of the shulchan aruch

            fallocate: fallocate failed: Text file busy in Ubuntu 17.04? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)defragmenting and increasing performance of old lubuntu system with swap partitionIssue with increasing the root partition from the swapthis /usr/bin/dpkg returned error || ubuntu-16.04, 64bitDefault 17.04 swap file locationHow to Resize Ubuntu 17.04 Zesty Swap file size?Ubuntu freezes from online formsMy Laptop is not starting after upgrade ubuntu 16.04 (Kernel 4.8.0-38 to 04.10.0-36)hcp: ERROR: FALLOCATE FAILED!Not sure my swap is being usedWine 3.0 asking for more virtual free swap